我用匕首注入一个ViewModel成片段之前:匕首2:注射对象可能仍然为空onAttach在片段称为
class BaseFragment<T extends BaseViewModel> extends Fragment {
@Inject T viewModel;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(viewModel == null) {
throw new RuntimeException("Viewmodel was null: "+getClass());
}
viewModel.setContext(context);
viewModel.onAttach(context);
}
}
class MyFragment extends BaseFragment<MyViewModel> {
public MyFragment() {
MyApp.getInstance().getComponent().inject(this);
//viewModel should be available at this point, before OnAttach is called
}
}
因此,在短期我注入视图模型在构造函数中,如果它在onAttach仍然是空的东西是错误的。
这绝不会发生,除非是100000次中的1次。只是几个崩溃。但无法弄清楚为什么。这种方法是错误的吗? Dagger是否对参数化对象有问题?
我不直接实例化BaseFragment,因此类型应该可以工作,它通常会这样做,那么为什么它在某些情况下不起作用?
因此,有时'if(viewModel == null)'计算为'true'? – azizbekian
是的。非常稀有。 – breakline