如何在广播接收器中访问MyViewModel(AndroidViewModel)
我最近在我的android应用程序中实现了Room。 () 它在如何在广播接收器中访问MyViewModel(AndroidViewModel),android,broadcastreceiver,android-viewmodel,Android,Broadcastreceiver,Android Viewmodel,我最近在我的android应用程序中实现了Room。 () 它在活动中运行良好 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWritedSMSViewModel = new ViewModelProvider(this).get(WritedSMSViewModel.class); mWritedSMSViewModel.getAllW
活动中运行良好
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWritedSMSViewModel = new ViewModelProvider(this).get(WritedSMSViewModel.class);
mWritedSMSViewModel.getAllWritedSMSs().observe(this, new Observer<List<WritedSMS>>() {
@Override
public void onChanged(@Nullable final List<WritedSMS> smss) {
// Update the cached copy of the words in the adapter.
if(smss != null) {
mAdapter.setSMSs(smss);
}
}
});
问题是我不知道上面的代码应该使用什么参数。
我确认此
和上下文
不能用作参数
我怎么了
你不应该那样做。这是个坏习惯。因为ViewModels仅附加了活动
和片段
有一件事可以达到你的要求
在单独的singleton
类中将Room DB
操作与ViewModel
分开。在ViewModel
和任何其他需要的地方使用它。当接收到广播
时,通过此单例类而不是ViewModel将数据写入DB
如果您正在查看片段
中的LiveData
,那么它也会更新您的视图
你不应该那样做。这是个坏习惯。因为ViewModels仅附加了活动
和片段
有一件事可以达到你的要求
在单独的singleton
类中将Room DB
操作与ViewModel
分开。在ViewModel
和任何其他需要的地方使用它。当接收到广播
时,通过此单例类而不是ViewModel将数据写入DB
如果您正在观察片段中的LiveData
,那么它也会更新您的视图。ViewModels可以附加活动/片段(LifeCycleOwners)&BroadcastReceiver
没有。所以简单的答案是你不能。@JeelVankhede谢谢你的回答。我不知道..ViewModels可以附加活动/片段
(LifeCycleOwners)&广播接收器
没有任何。所以简单的答案是你不能。@JeelVankhede谢谢你的回答。我不知道..多亏了你的回答,我可以在广播接收器
中访问我的数据库。我刚刚将一些房间功能更改为public,以访问BroadcastReceiver
中的那些功能(谷歌指南中的RoomDatabase已经是singleton类),并在BroadcastReceiver
中使用下面的代码WritedSMSDatabase db=WritedSMSDatabase.getDatabase(上下文);WritedSMSDAO mWritedSMSDAO=db.WritedSMSDAO();新建writedsmsrespository.insertAsyncTask(mWritedSMSDAO).execute(writedSMS)代码>正确的一个。。!!感谢您的回答,我可以在广播接收器
中访问我的数据库。我刚刚将一些房间功能更改为public,以访问BroadcastReceiver
中的那些功能(谷歌指南中的RoomDatabase已经是singleton类),并在BroadcastReceiver
中使用下面的代码WritedSMSDatabase db=WritedSMSDatabase.getDatabase(上下文);WritedSMSDAO mWritedSMSDAO=db.WritedSMSDAO();新建writedsmsrespository.insertAsyncTask(mWritedSMSDAO).execute(writedSMS)代码>正确的一个。。!!
mWritedSMSViewModel = new ViewModelProvider(???).get(WritedSMSViewModel.class);