错误:无法在后台线程上调用observeForever

时间:2020-09-08 09:27:03

标签: android androidx android-livedata

我将我的应用程序目标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中的后台线程观察实时数据,但是我该如何解决呢?

0 个答案:

没有答案