如何解决如何避免为每个改造响应创建不同的回调接口
我想从活动中提取改造请求实现。所以我想到了创造 一个类,它发出所有请求并将结果通过接口发送到活动。
我为响应回调创建了一个接口,如下所示
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");
}
}
对此有什么解决方案?
解决方法
试试这个:
- 创建一个抽象类BaseActivity,如下所示:
public abstract class BaseActivity extends AppCompatActivity implements IApi
- 在您的 BaseActivity 中创建抽象方法
public abstract void onSuceessTodo(Todo todo) {
Log.d("test","onSuceess");
}
public abstract void onFailure(String errorMessage) {
Log.d("test","onFailure");
}
public abstract void onSuceessTodo(String errorMessage) {
Log.d("test","onFailure");
}
- 你的 MainActivity 类应该是这样的
public class MainActivity extends BaseActivity
- 覆盖您只需要在 MainActivity 类中覆盖的方法
告诉我这是否适合您! (抱歉我的 Java 不好✌️)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。