【发布时间】:2021-03-06 18:02:40
【问题描述】:
我想从活动中提取改造请求实施。所以我想到了创作 发出所有请求并通过接口将结果发送到活动的类。
我为响应回调创建了一个接口,如下所示
public interface IApi {
void onSuceessTodo(Todo todo);
void onSuceessPosts(List<Post> postList);
void onFailure(String errorMessage);
}
我已经创建了一个存储库类。它发出两个不同的请求
public class Repository {
public void getPosts (IApi iApi) {
JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
Call<List<Post>> call = jsonPlaceHolderApi.getPosts();
call.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
if (!response.isSuccessful()) {
iApi.onFailure("Not successful");
return;
}
List<Post> posts = response.body();
iApi.onSuceessPosts(posts);
}
@Override
public void onFailure(Call<List<Post>> call, Throwable t) {
iApi.onFailure(t.toString());
}
});
}
public void getTodos (IApi iApi , int id) {
JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
Call<Todo> call = jsonPlaceHolderApi.getTodo(id);
call.enqueue(new Callback<Todo>() {
@Override
public void onResponse(Call<Todo> call, Response<Todo> response) {
if (!response.isSuccessful()) {
iApi.onFailure("Not successful");
return;
}
Todo todo = response.body();
iApi.onSuceess(todo);
}
@Override
public void onFailure(Call<Todo> call, Throwable t) {
iApi.onFailure(t.toString());
}
});
}
}
现在在活动中,我正在实现回调接口。但是对于这个活动,我只需要得到Todo 而不是Posts,所以我重写了所需的函数并将活动设为抽象,但我在运行应用程序时遇到了问题
ava.lang.RuntimeException: Unable to instantiate activity
我认为是因为我不能将活动抽象类,并且我不想为每个请求调用创建多个接口,因为我会有很多!
活动
public abstract class MainActivity extends AppCompatActivity implements IApi{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Repository repository = new Repository();
repository.getTodos(this , 1);
}
@Override
public void onSuceessTodo(Todo todo) {
Log.d("test" , "onSuceess");
}
@Override
public void onFailure(String errorMessage) {
Log.d("test" , "onFailure");
}
}
解决办法是什么?
【问题讨论】:
标签: java android android-activity retrofit repository-pattern