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

标签 java android

美好的一天,

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

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

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: Unable to start service com.mgb.textvote.services.ReadIncomingSMS@3ae6b5cf with Intent { cmp=com.mgb.textvote/.services.ReadIncomingSMS }: java.lang.ClassCastException: android.app.Application cannot be cast to androidx.fragment.app.FragmentActivity at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3119)

Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to androidx.fragment.app.FragmentActivity at com.mgb.textvote.services.ReadIncomingSMS.onStartCommand(ReadIncomingSMS.java:47)

如果应用程序上下文无法转换为fragmentActivity,那么我们如何在服务内使用房间数据库或者在后台进程中查询的最佳方法是什么?

最佳答案

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

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

关于java - 如何使用服务或的房间数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57802246/

相关文章:

android - 如何使除了我在 RecyclerView 中单击的项目之外的所有项目都不可见?

android - 带工具栏和 TabLayout 的 ViewPager 高度错误

java - 如何解决 java 图像缩放错误

java - 使用 Java 的 Stack GUI

Applet 中显示 Java Awt 组件但不显示 Swing 组件

java - JADX输出反编译错误: "Code decompiled incorrectly, please refer to instructions dump."

android - (Android) 为什么我使用 SmsManager.getDefault().sendTextMessage 但应用程序不发送短信?

android - 将新项目计数添加到按钮上的图标 - Android

java - Flex utf-8编码如何解决

java - 交错网格布局管理器 : Adding Margin makes the layout items pushed to the side