android dagger2 注入错误无法施放
android dagger2 inject error cannot cast
调用 onItemSelected() 方法时出现此错误此错误是什么意思?也许您知道如何修复它?
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);
}
,
主持人 class
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);
}
}
FATAL EXCEPTION: main
Process: com.ct.rrapp, PID: 15838
java.lang.ClassCastException: com.ct.rrapp.presentation.side_Effect.SideEffectReportActivity cannot be cast to 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.onItemSelected(AdviceListFragment.java:93)
at com.ct.rrapp.presentation.side_Effect.advice_list.common.AdviceListAdapter.lambda$onBindViewHolder(AdviceListAdapter.java:55)
at com.ct.rrapp.presentation.side_Effect.advice_list.common.AdviceListAdapter$$Lambda.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)
at 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.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
从这一行判断:
@Override
public void onAdviceBodyItemSelected(Advice advice) {
SideEffectReportActivity.start(this, advice);
}
并且此异常消息:
java.lang.ClassCastException:SideEffectReportActivity cannot be cast to MainRouter
可以得出结论,静态方法 SideEffectReportActivity#start(*, Advice)
期望 MainRouter
作为第一个参数,而 class,this
对象是 this
的实例,不实现 MainRouter
界面.
如果 this
对象是 MainActivity
的一个实例,这意味着您的 activity 没有实现 MainRouter
.
调用 onItemSelected() 方法时出现此错误此错误是什么意思?也许您知道如何修复它?
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);
}
, 主持人 class
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);
}
}
FATAL EXCEPTION: main Process: com.ct.rrapp, PID: 15838 java.lang.ClassCastException: com.ct.rrapp.presentation.side_Effect.SideEffectReportActivity cannot be cast to 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.onItemSelected(AdviceListFragment.java:93) at com.ct.rrapp.presentation.side_Effect.advice_list.common.AdviceListAdapter.lambda$onBindViewHolder(AdviceListAdapter.java:55) at com.ct.rrapp.presentation.side_Effect.advice_list.common.AdviceListAdapter$$Lambda.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) at 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.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
从这一行判断:
@Override
public void onAdviceBodyItemSelected(Advice advice) {
SideEffectReportActivity.start(this, advice);
}
并且此异常消息:
java.lang.ClassCastException:SideEffectReportActivity cannot be cast to MainRouter
可以得出结论,静态方法 SideEffectReportActivity#start(*, Advice)
期望 MainRouter
作为第一个参数,而 class,this
对象是 this
的实例,不实现 MainRouter
界面.
如果 this
对象是 MainActivity
的一个实例,这意味着您的 activity 没有实现 MainRouter
.