2016-07-26 132 views
0

我想使用领域中的缓存数据,然后使用改进来更新来自服务器的数据。我设法通过如下:使用Rxjava进行改造和领域

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的resuslts来自 ? (改造或领域)

回答

0

我结束了同是编辑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"); 
     } 
    } 
} 

,但我相信,还有比这

更好的和更清洁的解决方案