Как показать загрузчик при загрузке данных из новой библиотеки персистентности помещения и иметь обратные вызовы, такие как сбой или успех - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь использовать комнату для своей локальной базы данных, и моя проблема в том, что мой первый экран приложения показывает список устройств, сохраненных в библиотеке комнаты, но комната не обеспечивает никакого обратного вызова, такого как успех или сбой, так как вы, ребята, справляетесьс этим ?, также, как я могу показать загрузчик при загрузке данных из комнаты, так как я не могу работать с пользовательским интерфейсом из потока, пока он не работает в пользовательском потоке, который не рекомендуется для комнаты.

private void getDevices(){
    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {

            devicesList =
            AppDatabase.getAppDatabase(getActivity()).deviceDao().getAllDevices();
            devicesAdapter.notifyDataSetChanged();

        }
    });


}

1 Ответ

0 голосов
/ 28 декабря 2018

Room Database поддерживает асинхронные запросы - запросы, которые возвращают экземпляры LiveData или Flowable - исключены из этого правила, поскольку при необходимости они асинхронно запускают запрос в фоновом потоке.

ДляНапример, вместо возврата необработанных данных вы можете использовать что-то вроде этого:

@Dao
public interface MyDao {
    @Query("SELECT * from user where id = :id LIMIT 1")
    public LiveData<User> loadUserById(int id);
}

или

@Dao
public interface MyDao {
    @Query("SELECT * from user where id = :id LIMIT 1")
    public Flowable<User> loadUserById(int id);
}

Используя Flowable, вы можете прослушивать обратный вызов, чтобы показать / скрытьдиалоговое окно прогресса выглядит следующим образом:

AppDatabase.getAppDatabase(getActivity()).deviceDao().getAllDevices()
                .observeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe((Consumer<Subscription>) subscription -> {
                    // do something when subscribe
                    // show progress here
                })
                .doOnTerminate((Action) () -> {
                    // do something when success or fail
                    // hide progress here
                })
                .subscribe(device -> {
                    // load data success
                }, throwable -> {
                    // do when error
                });

Реактивные запросы с RxJava

Room обеспечивает следующую поддержку для возвращаемых значений типов RxJava2:

@ Методы запросов: Room поддерживает возвращаемые значения типа Publisher, Flowable и Observable.Методы @Insert, @Update и @Delete: Room 2.1.0 и выше поддерживает возвращаемые значения типа Completable, Single и Maybe.

Чтобы использовать эту функцию, включите последнюю версию rxjava2Артефакт в файле build.gradle вашего приложения:

app/build.gradle

dependencies {
    implementation 'androidx.room:room-rxjava2:2.1.0-alpha02'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...