为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用服务或的房间数据库

如何使用服务或的房间数据库

慕妹3146593 2023-07-13 18:10:34
再会,该应用程序需要监视传入的短信,即使应用程序被杀死,所以我认为服务是完成这项工作的最佳方式,但当我尝试调用视图模型时,我遇到了问题。我正在尝试使用我的项目服务从后台进程中选择、插入、更新、删除我的房间数据库。这是我的简单代码。public class ReadIncomingSMS extends Service {    RoomViewModel model;    @Override    public IBinder onBind(Intent intent) { return null; }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        model = ViewModelProviders.of((FragmentActivity) getApplicationContext()).get(RoomViewModel.class);    }}但 logcat 说,java.lang.RuntimeException:无法启动服务 com.mgb.textvote.services.ReadIncomingSMS@3ae6b5cf 与 Intent { cmp=com.mgb.textvote/.services.ReadIncomingSMS }:java.lang.ClassCastException:android.app.Application 不能在 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3119) 处转换为 androidx.fragment.app.FragmentActivity引起原因:java.lang.ClassCastException:android.app.Application无法在com.mgb.textvote.services.ReadIncomingSMS.onStartCommand(ReadIncomingSMS.java:47)处转换为androidx.fragment.app.FragmentActivity如果应用程序上下文无法转换为fragmentActivity,那么我们如何使用服务内的房间数据库或者在后台进程中查询的最佳方法是什么?
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

您正在尝试访问 Service 中的 FragmentActivity ViewModel。

为服务创建单独的 ViewModel,它将起作用。


查看完整回答
反对 回复 2023-07-13
?
交互式爱情

TA贡献1712条经验 获得超3个赞

我没有访问 Service 中的 FragmentActivity ViewModel,而是像这样更改代码。


到我的 MainActivity.java


public class MainActivity extends AppCompatActivity {

    public static RoomViewModel model;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        model = ViewModelProviders.of(this).get(RoomViewModel.class);

     }

}

然后在我的服务中


代替


model = ViewModelProviders.of((FragmentActivity) getApplicationContext()).get(RoomViewModel.class);

我把它改为


model = MainActivity.model;

我不知道这种方法是否是一个好的做法,但它似乎对我有用。


查看完整回答
反对 回复 2023-07-13
  • 2 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信