java - 如何使用服务中的房间数据库或
问题描述
再会,
该应用程序需要监视传入的短信,即使应用程序被杀死,所以我认为服务是完成这项工作的最佳方式,但是当我尝试调用视图模型时遇到了问题。
我正在尝试使用服务从后台进程中选择、插入、更新、删除我的房间数据库到我的项目。这是我的简单代码。
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 那么我们如何使用服务内部的房间数据库或者在后台进程中查询的最佳方法是什么?
解决方案
您正在尝试访问服务中的 FragmentActivity ViewModel。
为服务创建单独的 ViewModel,它将起作用。
推荐阅读
- scala - 带有双冒号的 Finch 中的 Scala Post 方法
- python - Django中的评论线程
- javascript - expressjs server.js 这是未定义的,我如何引用服务器
- c# - 使用 SharePoint CSOM 获取子文件夹
- sql - 如何在oracle中找到将行限制为前1
- react-router-v4 - React 路由器 + SSR + 水合物
- heroku - 如何撤消 Heroku 回滚
- html - 修复 SVG Fragment Sprite 在 Edge 中缓慢加载(在 Chrome、FF、Safari 中正常)
- javascript - 重建连接数组方法
- r - 3 参数 purrr::accumulate 的奇怪行为?