нужна ваша помощь.
У меня есть считыватель кода qr, который принимает мне какой-то объект.
С другой стороны, у меня есть объект LiveData из SQLite (Room).
Когда я получаю объект от QRScanner, я пытаюсь вызвать объект живых данных из базы данных, чтобы проверить, завершился ли он (по строке).
Но у меня есть ошибка, которая говорит:
E/CameraSource: Exception thrown from receiver.
java.lang.IllegalStateException: Cannot invoke observe on a background thread
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:462)
at androidx.lifecycle.LiveData.observe(LiveData.java:189)
at com.msapps.movieapp.view.fragments.QRCodeScannerFragment.onQRScanned(QRCodeScannerFragment.java:108)
at com.msapps.movieapp.view.fragments.-$$Lambda$PGtfO3ziWSk5mvcCZ1yOj6ZqQtU.onQRScanned(Unknown Source:2)
at com.msapps.movieapp.utils.QRScanner$2.receiveDetections(QRScanner.java:100)
Вот мой QRScanner.
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barcodes = detections.getDetectedItems();
if (barcodes.size() != 0) {
Gson gson = new Gson();
MoviesResponse moviesResponse = gson.fromJson(barcodes.valueAt(0).displayValue, MoviesResponse.class);
iCallback.onQRScanned(moviesResponse);
}
}
});
}
public interface QRCodeInterface{
void onQRScanned(MoviesResponse response);
}
С интерфейсом iCallback я передаю данные во фрагмент:
А во фрагменте делаю следующее:
@Override
public void onQRScanned(MoviesResponse response) {
mMoviesViewModel.getMovieByTitle(response.getTitle()).observe(QRCodeScannerFragment.this, new Observer<MoviesResponse>() {
@Override
public void onChanged(MoviesResponse moviesResponse) {
mTVMovieTitle.setText(response.getTitle());
}
});
}
GetMovieByTitle из класса репо:
public LiveData<MoviesResponse> getMovieByTitle(String movieTitle) {
return movieDao.getMovie(movieTitle);
}
И запрос от Дао
@Query("select * from movies where movie_title ==:title")
LiveData<MoviesResponse> getMovie(String title);
Кто-нибудь может помочь?