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

Android 错误:无法在后台线程上调用ObserveForver,android,androidx,android-livedata,Android,Androidx,Android Livedata,我将我的应用程序目标sdk更改为api 29。突然,我的应用程序在针对api 28的时候运行得非常好,但它停止了工作。我不知道为什么,所以我想我应该迁移到androidx。我这样做了,然后当我运行应用程序时,它崩溃了。我得到了错误 java.lang.IllegalStateException: Cannot invoke observeForever on a background thread at androidx.lifecycle.LiveData.assertMainThr

我将我的应用程序目标sdk更改为api 29。突然,我的应用程序在针对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)
java.lang.IllegalStateException:无法在后台线程上调用ObserveForver
位于androidx.lifecycle.LiveData.assertMainThread(LiveData.java:443)
位于androidx.lifecycle.LiveData.observeforevir(LiveData.java:204)
位于co.sentinel.lite.repository.VpnRepository.(VpnRepository.java:74)
位于co.sentinel.lite.repository.VpnRepository.getInstance(VpnRepository.java:92)
位于co.sentinel.lite.di.InjectorModule.provideVpnRepository(InjectorModule.java:45)
位于de.blinkt.openvpn.core.OpenVPNService.disconnectVpnCall(OpenVPNService.java:192)
位于de.blinkt.openvpn.core.OpenVPNService.endVpnService(OpenVPNService.java:185)
位于de.blinkt.openvpn.core.OpenVPNService.processDied(OpenVPNService.java:178)
位于de.blinkt.openvpn.core.OpenVPNThread.run(OpenVPNThread.java:108)
运行(Thread.java:919)
这就是它所说的错误所在
LiveData aVpnListServerData=getVpnListMutableLiveData();
aVpnListServerData.observeForver(vpnList->{
mAppExecutors.diskIO().execute(()->{
if(vpnList!=null&&vpnList.size()>0){
List aBookmarks=mBookmarkDao.getAllBookmarkEntities();
对于(int i=0;i

我知道我无法从api29中的后台线程观察livedata,但我如何解决这个问题?

也许这回答了您的问题?
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);
                }
            });
        });