【发布时间】:2019-04-10 05:57:47
【问题描述】:
应用程序构建但在运行时因空对象引用而崩溃。一直在尝试调试它但找不到错误但我知道如果我删除 textview 上的 setText 调用方法来检索字符串然后通过片段显示在 MainActivity 中(如果我删除它不会崩溃)这让我相信我的空对象与我没有实例化视图模型的方式有关。不确定如何执行此操作。
尝试从堆栈跟踪中删除和定位 bufg,该错误指出空对象引用在片段中的 onActivityCreated 中,但 Dagger 生成代码这是我迷失的地方,就好像我不运行它构建并且显示没有编译时错误一样。
public class HomeFragment extends Fragment {
@Inject
HomeViewModel homeViewModel;
TextView tvFrag;
public HomeFragment() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_home, container, false);
return v;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
tvFrag = getActivity().findViewById(R.id.tv_frag);
tvFrag.setText(homeViewModel.getConnection()); //HERE
}
}
@FragmentScope
public class HomeViewModel extends ViewModel {
private DatabaseService databaseService;
private NetworkService networkService;
private NetworkHelper networkHelper;
@Inject
public HomeViewModel(DatabaseService ds, NetworkService ns, NetworkHelper nh){
this.databaseService = ds;
this.networkService = ns;
this.networkHelper = nh;
}
public String getConnection(){
return "Ben Mohammad Connected";
}
}
GitHub 链接 - https://github.com/BenMohammad/LearnDagger-STAGE_2-with-dagger-better
应该在viewModel中调用getConnection()方法,获取一个字符串并显示在已经添加到MainActivity的fragment上。
谢谢
【问题讨论】:
-
鉴于代码原样,我想说它很可能是为空的 viewModel。你在什么时候用匕首注入片段?
-
是的,你是对的 Fred 我已经上传了 stackTrace 我不明白如何使用 Dagger 实例化视图模型......
-
你使用的是 dagger-android 还是只是 dagger?
-
实现 "com.google.dagger:dagger:2.21" annotationProcessor "com.google.dagger:dagger-compiler:2.21"
标签: java android dagger android-viewmodel