【问题标题】:using Rxjava with retrofit and realm使用带有改造和领域的 Rxjava
【发布时间】:2016-07-26 21:24:58
【问题描述】:

我想在领域中使用缓存的数据,然后使用改造从服务器更新数据。我通过以下方式做到了这一点:

public void getNotifications() {
    Observable.concat(getCashedNotifications(), downloadNotification())
            .subscribe(new Action1<List<Notification>>() {
                @Override
                public void call(List<Notification> notifications) {
                    setSize(notifications.size() + "");
                }
            });
}

private Observable<List<Notification>> getCashedNotifications() {
    return Observable.just(mRealm.copyFromRealm(mRealm.where(Notification.class).findAll()));
}

private Observable<List<Notification>> downloadNotification() {
    return mApiHandler.createRetrofitService(NotificationServices.class)
            .getNotificationByUser(10)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnNext(new Action1<NotificationResponse>() {
                @Override
                public void call(final NotificationResponse notificationResponse) {
                    setLoading(false);
                    mRealm.executeTransactionAsync(new Realm.Transaction() {
                        @Override
                        public void execute(Realm realm) {
                            realm.copyToRealmOrUpdate(notificationResponse.getResult().getData().getNotifications());
                        }
                    });
                }
            })
            .map(new Func1<NotificationResponse, List<Notification>>() {
                @Override
                public List<Notification> call(NotificationResponse notificationResponse) {
                    if (notificationResponse.getResult() != null) {
                        return notificationResponse.getResult().getData().getNotifications();
                    } else {
                        return new ArrayList<>();
                    }
                }
            });
}

我的问题是获取当前状态,例如: 1-如果领域中没有数据显示进度 2-如果没有数据和网络显示错误对话框 3-如果领域中有数据并且没有网络仅显示领域中的数据 4- 如果领域中没有数据并且没有来自改造的数据显示没有数据状态

知道如何知道 concat 的结果来自吗? (改造或领域)

【问题讨论】:

    标签: android realm rx-java retrofit2 rx-android


    【解决方案1】:

    我最终的结果是将 getNotifications 方法编辑为以下内容

    public void getNotifications() {
        setNoData(false);
        setLoading(false);
        if (ConectivityUtils.isDeviceConnectedToNetwork(mContext)) {
            if (mRealm.where(Notification.class).count() > 0) {
                Observable.concat(getCashedNotifications(), downloadNotification())
                        .subscribe(new Action1<List<Notification>>() {
                            @Override
                            public void call(List<Notification> notifications) {
                                setSize(notifications.size() + "");
                            }
                        });
            } else {
                // show progress
                setLoading(true);
                downloadNotification().subscribe(new Action1<List<Notification>>() {
                    @Override
                    public void call(List<Notification> notifications) {
                        setLoading(false);
                        if (notifications.size() > 0) {
                            setSize(notifications.size() + "");
                        } else {
                            // no data in realm and retrofit
                            setNoData(true);
                            setErrorMessage("No data");
                        }
                    }
                });
            }
        } else {
            if (mRealm.where(Notification.class).count() > 0) {
                getCashedNotifications().subscribe(new Action1<List<Notification>>() {
                    @Override
                    public void call(List<Notification> notifications) {
                        setSize(notifications.size() + "");
                    }
                });
            } else {
                //show no network
                setNoData(true);
                setErrorMessage("No Network");
            }
        }
    }
    

    但我相信有比这更好、更清洁的解决方案

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多