Realm uploadAllLocalChanges - PullRequest
       12

Realm uploadAllLocalChanges

0 голосов
/ 21 марта 2019

Мне нужно сохранить некоторые данные и загрузить их немедленно на сервер (объектный сервер Realm), поскольку функция, инкапсулированная в классе репозитория, должна закрывать Realm сразу после транзакции.

Что происходит, когда я закрываю областьчто у меня нет изменений на сервере (когда область остается открытой, у меня есть изменения), это противоположно тому, что говорит документ:

// Загрузка будет продолжаться в фоновом режиме, даже если мы // немедленно закройте Царство.Realm.getInstance (конфигурация) .close ();

документы

Итак, я пытаюсь использовать uploadAllLocalChanges(), но это трудная работа, когда область закрыта, так какой смысл в этомметод (когда область открывается, он обновляется автоматически без этого метода)?но это все еще полезно, потому что я могу закрыть область, когда изменения обновляются, но небольшая функция превращается в большой беспорядок с потенциальными ошибками.

public void editRealm(String projectName, String newName, ResultCallback<Void> callback) {

    Realm.getInstanceAsync(getSharedConfiguration(), new Realm.Callback() {
        @Override
        public void onSuccess(@NonNull Realm realm) {

            Alias alias = new Alias();
            alias.setId(projectName);
            alias.setName(newName);


            realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(@NonNull Realm realm1) {
                    realm1.insertOrUpdate(alias);

                }
            });


            uploadAllLocalChanges(getSharedConfiguration())
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new CompletableObserver() {
                @Override
                public void onSubscribe(Disposable d) {
                }

                @Override
                public void onComplete() {
                    realm.close();
                    callback.onSuccess();
                }

                @Override
                public void onError(Throwable e) {
                    realm.close();
                    callback.onError(e.getLocalizedMessage());
                }
            });

        }

        @Override
        public void onError(@NonNull Throwable exception) {
            callback.onError(exception.getLocalizedMessage());
        }
    });

}

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

...