最近我使用MVP
开发Android应用程序。Android Bug或Java Bug:执行回调时发现错误实例
但我发现一个Android的Bug(也许我是错的)
我有两个主持人NewsPresenter
和MainPresenter
。 NewsPresenter
在片段NewsFragment
创建一个实例,并MainPresenter
是在活动MainActivty
创建的实例。当然MainActivity
包括NewsFragment
。既2演示者有两个方法来实现,其处理成功响应和失败的响应。
NewsPresenter
public class NewsPresenter extends IPresenter implements IAdapter.OnRecycleItemClickListener{
@Override
protected void onIRequestSuccess(int requestId, IResponse response) {
Log.e("TAG","onIRequestSuccess:"+requestId);
....
}
@Override
protected void onIRequestFail(int requestId, Throwable throwable) {
Log.e("TAG","onIRequestFail:"+requestId);
...
}
}
MainPresenter
public class MainPresenter extends IPresenter{
public MainPresenter(Context context, IMain iMain) {
super(context);
}
@Override
protected void onIRequestSuccess(int requestId, IResponse response) {
//do nothing
}
@Override
protected void onIRequestFail(int requestId, Throwable throwable) {
//do nothing
}
}
现在,在NewsPresenter
我尽量让网络request.In的BasePresenter
这是它的超类我做一个日志显示哪些尝试执行网络request.And日志类是:
01-02 20:09:28.281 17206-17206/com.chengtao.culture E/BasePresenter: class com.chengtao.culture.presenter.NewsPresenter
这意味着NewsPresenter
执行请求。
但在IPresente
这是NewsPresenter
和MainPresenter
超一流的,我尽量让日志,以显示其处理response.And日志是类:
01-02 20:09:38.352 17206-17206/com.chengtao.culture E/TAG: class com.chengtao.culture.presenter.MainPresenter
这干线的MainPresenter
手柄响应。
IPresenter
abstract class IPresenter extends BasePresenter{
IPresenter(Context context) {
super(context);
}
@Override
public void onRequestSuccess(int requestId, BaseResponse response) {
Log.e("TAG",this.getClass().toString());
IResponse response1 = (IResponse) response;
Log.e("TAG","onRequestSuccess");
onIRequestSuccess(requestId,response1);
}
@Override
public void onRequestFail(int requestId, Throwable throwable) {
Log.e("TAG",this.getClass().toString());
if (throwable == null || throwable.getMessage() == null){
throwable = new Throwable("请求超时");
onIRequestFail(requestId,throwable);
}else {
onIRequestFail(requestId,throwable);
}
}
protected abstract void onIRequestSuccess(int requestId, IResponse response);
protected abstract void onIRequestFail(int requestId, Throwable throwable);
}
我很困惑,为什么我用NewsPresenter
发出请求,但MainPresenter
处理响应?这不是科学,因为日志显示该请求是NewsPresenter
执行,MainPresenter
有与NewsPresenter
没有关系只是他们两个延伸IPresenter
。
但是,一旦我在Activity中删除了MainPresenter的实例,响应将由NewsPresenter处理。
要看到整个代码:https://github.com/ParadiseHell/cultural-creative/tree/master/app/Culture
我要确保我的代码是所有的权利,所以我不知道是Android bug
或它的Java bug
。如果有人知道,请告诉我,谢谢。
你的代码是正确的,但我不认为我没有错。因为你不知道有多少个请求,所以我让'IPresenter'执行所有请求并支持两种抽象方法来处理所以每个主持人只是扩展'IPresenter'并通过'requestId'处理响应。 **所以我不需要在每个request.**@Sairam Rachapudi – ChengTao
中设置回调我只想问你如何解释,当我删除'MainPresenter'的实例时,我可以在'NewsPresenter'中正确回调。但是当我补充时,它不会。@ Sairam Rachapudi – ChengTao