Home » Android » android – Cannot invoke observeForever on a background thread

android – Cannot invoke observeForever on a background thread

Posted by: admin May 14, 2020 Leave a comment

Questions:

I’ve been using an observeForever() method as described here to test Room and LiveData for a while, and it has worked flawlessly. But when I changed to Android Studio 3.2 (or if it was the androidx refactoring, not sure), that method suddenly stopped working, throwing a

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

How can we fix this?

How to&Answers:

I solved it by adding the rule InstantTaskExecutorRule. According to the docs it will

A JUnit Test Rule that swaps the background executor used by the Architecture Components with a different one which executes each task synchronously.

So one needs to add

@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()

to the test class for it to work. The Java equivalent would be

@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

You will also need to add

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

to your models build.gradle dependencies.