Как исправить мой шаблон хранилища, когда в автономном режиме с mvvm - PullRequest
3 голосов
/ 15 мая 2019

Я создаю очень простое приложение для Android, используя mvvm и шаблон репозитория. Он извлекает данные из сети (используя retrofit2 / RxJava2), если приложение находится в сети и сохраняет в БД (используя комнату), и публикует данные для наблюдения. Если приложение находится в автономном режиме, приложение получает данные из БД и публикует данные для наблюдения. Из действия приложение обновляет текстовые представления после наблюдения из класса viewmodel.

Все работает очень хорошо, когда приложение имеет активное подключение к Интернету. Когда интернет недоступен, он не загружает данные из БД. И это проблема, с которой я сталкиваюсь без понятия.

Занятие

viewModel.loadHomeData();
        viewModel.homeDataEntityResult().observe(this, this::updateTextViews);

private void updateTextViews(HomeDataEntity data) {
        if (data != null) {
            tv1.setText(data.todayDate);
            tv2.setText(data.bnDate);
            tv3.setText(data.location);
        }
    }

Класс представления модели

private RamadanRepository repository;
    private DisposableObserver<HomeDataEntity> disposableObserver;

    private MutableLiveData<HomeDataEntity> homeDataEntityResult = new MutableLiveData<>();

public LiveData<HomeDataEntity> homeDataEntityResult() {
        return homeDataEntityResult;
    }

public void loadHomeData() {
        disposableObserver = new DisposableObserver<HomeDataEntity>() {
            @Override
            public void onNext(HomeDataEntity homeDataEntity) {
                homeDataEntityResult.postValue(homeDataEntity);

            }

            @Override
            public void onError(Throwable e) {

                           }

            @Override
            public void onComplete() {

            }
        };

        repository.getHomeData()
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .debounce(400, MILLISECONDS)
                .subscribe(disposableObserver);
    }

Класс репозитория

public Observable<HomeDataEntity> getHomeData() {
        boolean hasConnection = appUtils.isOnline();

        Observable<HomeDataEntity> observableFromApi = null;
        if (hasConnection) {
            observableFromApi = getHomeDataFromApi();
        }
        Observable<HomeDataEntity> observableFromDb = getHomeDataFromDb();

        if (hasConnection)
            return Observable.concatArrayEager(observableFromApi, observableFromDb);
        else return observableFromDb;

    }

    private Observable<HomeDataEntity> getHomeDataFromApi() {
        return apiService.getDemoHomeData()
                .map(HomeDataEntity::copyFromResponse)
                .doOnNext(homeDataDao::saveData);
    }

    private Observable<HomeDataEntity> getHomeDataFromDb() {
        return homeDataDao.getHomeData()
                .toObservable()
                .doOnNext(homeDataEntity -> {
                    Timber.d("db data %s", homeDataEntity.toString());
                });
    }

Когда приложение подключено к сети, оно также печатает вставленные данные roomDB после извлечения. Чего на самом деле не хватает, когда приложение находится в автономном режиме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...