web-dev-qa-db-ja.com

バックグラウンドスレッドでObserveForeverを呼び出すことはできません

説明されているようにobserveForever()メソッド here を使用してRoomとLiveDataをしばらくテストしてきましたが、問題なく動作しました。しかし、Android Studio 3.2に変更した場合(またはandroidxリファクタリングであるかどうかは不明です)、そのメソッドは突然機能を停止し、

Java.lang.IllegalStateException: Cannot invoke observeForever on a background thread

どうすればこれを修正できますか?

10
Algar

ルールInstantTaskExecutorRuleを追加して解決しました。 docs によると、

アーキテクチャコンポーネントが使用するバックグラウンドエグゼキュータを、各タスクを同期的に実行する別のエグゼキュータと交換するJUnitテストルール。

追加する必要があります

@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()

それが機能するためのテストクラスに。 Java同等のものは

@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

追加する必要もあります

androidTestImplementation "androidx.Arch.core:core-testing:2.0.0"

あなたのモデルにbuild.gradle依存関係。

25
Algar