再會,該應用程序需要監視傳入的短信,即使應用程序被殺死,所以我認為服務是完成這項工作的最佳方式,但當我嘗試調用視圖模型時,我遇到了問題。我正在嘗試使用我的項目服務從后臺進程中選擇、插入、更新、刪除我的房間數據庫。這是我的簡單代碼。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 回答

交互式愛情
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;
我不知道這種方法是否是一個好的做法,但它似乎對我有用。
添加回答
舉報
0/150
提交
取消