【发布时间】:2019-02-15 00:27:08
【问题描述】:
我刚刚升级到AndroidX,之后我提出了所有要求。我让后台线程不运行,但出现此错误。
private void getContactsList() {
Task.callInBackground((Callable<Void>) () -> {
mainActivityViewModel.geContacts(contactListRequest).observe(MainActivity.this, new Observer<ContactListResponse>() {
@Override
public void onChanged(@Nullable ContactListResponse contactListResponse) {
if(contactListRequest != null){
System.out.println("Successful");
}
}
});
return null;
}).continueWith((Continuation<Void, Void>) task -> {
if (task.isFaulted()) {
Log.e(TAG, "find failed", task.getError());
}
return null;
});
}
java.lang.IllegalStateException: Cannot invoke observe on a background thread
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:443)
at androidx.lifecycle.LiveData.observe(LiveData.java:171)
at com.qucoon.rubies.MainActivity.lambda$getContactsList$12(MainActivity.java:887)
at com.qucoon.rubies.-$$Lambda$MainActivity$qPAxeGqyWT-wT3M7e8stM1rX2gQ.call(lambda)
at bolts.Task$4.run(Task.java:357)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
【问题讨论】:
-
发布您的相关代码
-
我已经做到了@Raghunandan
-
检查您对
Observer的导入,也许从MV你应该postValue(...)?此方法从其他线程发布,setValue(...)从主线程发布。 -
代码看起来不错。您需要发布更多相关代码。您设置contactList的线程部分
-
Task.callInBackground((Callable<Void>) () ...也许这里隐藏了问题?Cannot invoke observe on a background thread