2017-04-19 57 views
-3

當調用onItemSelected()方法時得到這個錯誤這個錯誤是什麼意思?也許你有任何想法如何解決它?android dagger2注入錯誤不能轉換

方法被稱爲在MainActivity

@Override 
public void onAdviceBodyItemSelected(Advice advice) { 
    SideEffectReportActivity.start(this, advice); 
} 

接口

public interface MainRouter extends BodyRouter { 

void onAdviceBodyItemSelected(Advice advice); 

    } 

, 片段

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     MainActivity activity = (MainActivity) getActivity(); 

     getPresenter().setRouter(activity); 
     mAdvicePresenter.getList(mBody); 
     activity.resolveToolbar(this); 
    } 

, 演示類

public class AdviceListPresenter extends BasePresenter<AdviceListView,` 

    MainRouter> { 

    private static final String TAG = "advicelistpresenter"; 
    private 



final GetSideEffectListByCategoryInteractor mGetSideEffectListInteractor; 

@Inject 
AdviceListPresenter(GetSideEffectListByCategoryInteractor getSideEffectListInteractor) { 
    mGetSideEffectListInteractor = getSideEffectListInteractor; 
} 

@Override public void onStart() { 

} 

@Override public void onStop() { 
    mGetSideEffectListInteractor.unsubscribe(); 
} 


void getList(Body body) { 
    getView().onStartLoading(); 
    mGetSideEffectListInteractor.execute(body.name(), new Subscriber<List<Advice>>() { 
     @Override public void onCompleted() { 

     } 

     @Override public void onError(Throwable e) { 
      getView().onLoaded(); 
     } 

     @Override public void onNext(List<Advice> groups) { 
      getView().onLoaded(); 

      System.out.println("----------------------------------------------------------qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq--------------------------------: "); 
      getView().updateAList(groups); 
     } 
    }); 
} 


void onItemSelected(Advice advice) { 
    // getRouter().openSideEffect(advice); 
    //getRouter().onAdviceItemSelected(advice); 
    // Log.e(TAG," ADVICE :" + advice.bodypartProblemsGroup); 

    Log.e(TAG,"router :" + getRouter()); 
    getRouter().onAdviceBodyItemSelected(advice); 
} 
void onGItemSelected(AdviceGroup adviceGroup) { 
    // getRouter().openSideEffect(advice); 
    //getRouter().onAdviceItemSelected(advice); 
    // Log.e(TAG," ADVICE :" + advice.bodypartProblemsGroup); 
} 
} 

致命異常:主 工藝:com.ct.rrapp,PID:15838 java.lang.ClassCastException:com.ct.rrapp.presentation.side_Effect.SideEffectReportActivity不能轉換到nl.creativeict.radiotherapp。 presentation.main.MainRouter at com.ct.rrapp.presentation.side_Effect.advice_list.AdviceListPresenter.onItemSelected(AdviceListPresenter.java:80) at com.ct.rrapp.presentation.side_Effect.advice_list.AdviceListFragment $ 1.onItemSelected(AdviceListFragment。 java:93) at com.ct.rrapp.presentation.side_Effect.advice_list.common.AdviceListAdapter.lambda $ onBindViewHolder $ 1(AdviceLi stAdapter.java:55) at com.ct.rrapp.presentation.side_Effect.advice_list.common.AdviceListAdapter $$ Lambda $ 4.onClick(Unknown Source) at android.view.View.performClick(View.java:5697) at android.view.View $ PerformClick.run(View.java:22526) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com。 android.internal.os.Zygot EINIT $ MethodAndArgsCaller.run(ZygoteInit.java:1230) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

+0

你爲什麼要標記這把匕首?你的代碼中沒有匕首的跡象。 –

+0

@Inject是不是匕首註釋? – kosas

+0

哦,對不起,錯過了單獨'@ Inject' –

回答

1

通過這條線來看:

@Override 
public void onAdviceBodyItemSelected(Advice advice) { 
    SideEffectReportActivity.start(this, advice); 
} 

而這種異常消息:

java.lang.ClassCastException:SideEffectReportActivity不能轉換到MainRouter

可以得出結論,靜態方法SideEffectReportActivity#start(*, Advice)預計MainRouter作爲第一個參數,而類,即this對象是實例,不實現MainRouter接口。

如果this對象是MainActivity的實例,表示您的活動未執行MainRouter

相關問題