如何在广播接收器中访问MyViewModel(AndroidViewModel)

如何在广播接收器中访问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

我最近在我的android应用程序中实现了Room。 ()

它在
活动中运行良好

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);