如何解决错误:无法在后台线程上调用observeForever 这是错误所在的地方
我将我的应用程序目标sdk更改为api29。突然,我的应用程序在针对api 28时运行良好,并且停止运行。我不知道为什么,所以我认为我应该迁移到androidx。我这样做,然后在运行应用程序时崩溃。我得到了错误
java.lang.IllegalStateException: Cannot invoke observeForever on a background thread
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:443)
at androidx.lifecycle.LiveData.observeForever(LiveData.java:204)
at co.sentinel.lite.repository.VpnRepository.<init>(VpnRepository.java:74)
at co.sentinel.lite.repository.VpnRepository.getInstance(VpnRepository.java:92)
at co.sentinel.lite.di.InjectorModule.provideVpnRepository(InjectorModule.java:45)
at de.blinkt.openvpn.core.OpenVPNService.disconnectVpnCall(OpenVPNService.java:192)
at de.blinkt.openvpn.core.OpenVPNService.endVpnService(OpenVPNService.java:185)
at de.blinkt.openvpn.core.OpenVPNService.processDied(OpenVPNService.java:178)
at de.blinkt.openvpn.core.OpenVPNThread.run(OpenVPNThread.java:108)
at java.lang.Thread.run(Thread.java:919)
这是错误所在的地方
LiveData<List<VpnListEntity>> aVpnListServerData = getVpnListMutableLiveData();
aVpnListServerData.observeForever(vpnList -> {
mAppExecutors.diskIO().execute(() -> {
if (vpnList != null && vpnList.size() > 0) {
List<BookmarkEntity> aBookmarks = mBookmarkDao.getAllBookmarkEntities();
for (int i = 0; i < vpnList.size(); i++) {
vpnList.get(i).setServerSequence(i);
vpnList.get(i).setBookmarked(aBookmarks.contains(new BookmarkEntity(vpnList.get(i).getAccountAddress(),vpnList.get(i).getIp())));
}
mListDao.deleteVpnListEntity();
mListDao.insertVpnListEntity(vpnList);
}
});
});
我了解到我无法从api29中的后台线程观察实时数据,但是我该如何解决呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。