【问题标题】:How to combine Retrofit 2 with Realm and RxJava如何将 Retrofit 2 与 Realm 和 RxJava 结合使用
【发布时间】:2016-03-09 16:53:16
【问题描述】:

我想在后台线程上保存对领域的改造响应,然后将其传递给 UI 线程,但这有点棘手,因为领域对线程非常敏感。所以代码看起来像这样,请将您的编辑提交给所有更好的解决方案:)

restApi.userRealmList()
        .doOnNext(userRealmModels -> {
            if (userRealmModels != null){
                mRealm = Realm.getInstance(mContext);
                mRealm.asObservable()
                        .map(realm -> mRealm.copyToRealmOrUpdate(userEntity))
                        .subscribe(new Subscriber<Object>() {
                            @Override
                            public void onCompleted() {

                            }

                            @Override
                            public void onError(Throwable e) {
                                e.printStackTrace();
                            }

                            @Override
                            public void onNext(Object o) {
                                Log.d("RealmManager", "user added!");
                            }
                        });
            }})
        .map(userEntityDataMapper::transformAll)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Subscriber<List<User>>() {
             @Override
             public void onCompleted() {
                 hideViewLoading();
             }

             @Override
             public void onError(Throwable e) {
                 hideViewLoading();
                 showErrorMessage(new DefaultErrorBundle((Exception) e));
                 showViewRetry();
             }

             @Override
             public void onNext(List<User> users) {
                 showUsersCollectionInView(users);
             }
        });

【问题讨论】:

    标签: multithreading realm rx-java retrofit2


    【解决方案1】:

    您的代码看起来无法编译?例如。什么是userEntity。此外,您的 copyToRealmOrUpdate 不在事务中,因此也会崩溃,但与线程无关。

    如果您想在将某些数据发送到 UI 之前将其保存为副作用,您应该能够执行以下操作:

    restApi.userRealmList()
            .doOnNext(userRealmModels -> {
                if (userRealmModels != null) {
                    Realm realm = Realm.getInstance(mContext);
                    realm.beginTransaction();
                    realm.copyToRealmOrUpdate(userRealmModels);
                    realm.commitTransaction();
                    realm.close();
                }})
            .map(userEntityDataMapper::transformAll)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<List<User>>() {
                 @Override
                 public void onCompleted() {
                     hideViewLoading();
                 }
    
                 @Override
                 public void onError(Throwable e) {
                     hideViewLoading();
                     showErrorMessage(new DefaultErrorBundle((Exception) e));
                     showViewRetry();
                 }
    
                 @Override
                 public void onNext(List<User> users) {
                     showUsersCollectionInView(users);
                 }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多