首页 > 解决方案 > 如何使用服务中的房间数据库或

问题描述

再会,

该应用程序需要监视传入的短信,即使应用程序被杀死,所以我认为服务是完成这项工作的最佳方式,但是当我尝试调用视图模型时遇到了问题。

我正在尝试使用服务从后台进程中选择、插入、更新、删除我的房间数据库到我的项目。这是我的简单代码。

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:无法使用 Intent { cmp=com.mgb.textvote/.services.ReadIncomingSMS } 启动服务 com.mgb.textvote.services.ReadIncomingSMS@3ae6b5cf: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 那么我们如何使用服务内部的房间数据库或者在后台进程中查询的最佳方法是什么?

标签: javaandroid

解决方案


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

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


推荐阅读