最近我使用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