2016-07-26 7 views
0

Я хочу использовать кэшированные данные в области, а затем обновлять данные с сервера с помощью модификации. я сумел что следующая:с использованием Rxjava с модификацией и realm

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 области, если нет данных в области, и данных от модификации не показывают данные состояний

любой идеи, как знать resuslts из CONCAT из ? (Модифицированная или область)

ответ

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"); 
     } 
    } 
} 

, но я считаю, что лучше и чище, чем решение этой

Смежные вопросы