をRxAndroid:私のWebサービスからの医師のリストを取得するためSyncDoctorsをの連結観測が必要として動作していない私は1</p> <p>まず自分の観測返し2つの異なるジョブを行う2つの観測持っ
public Observable<List<Doctor>> SyncDoctors(){
Observable<List<Doctor>> observable = MyWebService.getInterface().GetAllDoctors();
observable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.subscribe(new Subscriber<List<Doctor>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Doctor> doctors) {
if(doctors.size() == 0){
logger.debug("No Coming Doctors");
return;
}
DoctorDao doctorDao = MyApplication.getDaoSession().getDoctorDao();
doctorDao.deleteAll();
doctorDao.insertInTx(doctors);
logger.debug("Doctors are synced successfully to the database");
logger.info(doctors.size()+" doctors have been added to database");
}
});
return observable;
}
私のウェブサービスから患者リストを取得するための
public Observable<List<Patients>> SyncPatients(){
Observable<List<Patients>> observable = MyWebService.getInterface().GetAllPatients();
observable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.subscribe(new Subscriber<List<Patients>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Patients> patients) {
if(patients.size() == 0){
logger.debug("No Coming Patients");
return;
}
PatientDao PatientDao = MyApplication.getDaoSession().getPatientDao();
patientDao.deleteAll();
PatientDao.insertInTx(Patients);
logger.debug("Patients are synced successfully to the database");
logger.info(Patients.size()+" Patients have been added to database");
}
});
return observable;
}
は、今私は両方の医師と患者のリストを同期すると、両方の同期が完了した後、私はタブレットの画面上に表示する:
私が持っているSyncAllをI
public void SyncAll(){
Observable<List<Doctor>> doctorsObservable = SyncDoctors();
Observable<List<Patient>> patientsObservable = SyncPatients();
Observable.concat(doctorsObservable, patientsObservable)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
// Here the code to show on ListView
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
logger.debug("On SyncAll Next!!!");
}
});
}
onNext機能と呼ばれる機能医師のリストと患者のリストをデータベースに保存する。私は一人でSyncDoctors()
を呼び出すとき
は今、それは私が一人でSyncPatients()
を呼び出すとき、それは同様に動作も に動作します。
SyncAll()
に電話すると、医師と患者はデータベースに保存されません。私はSyncAll()
を呼び出すとき
質問はなぜSyncDoctors()
とSyncPatients()
観測onNext関数が呼び出されています!あなたはあなたが最初に(SyncDoctors()とSyncPatientsのそれに加入し、観測可能な作成
Observable<List<Doctor>> doctorsObservable = SyncDoctors();
Observable<List<Patient>> patientsObservable = SyncPatients();
で.subscribe()を呼び出すことでチェーンを活性化させるため
'SyncAll'で' onError'内e.printStackTraceを追加して、何が起こっているか見てみてください。 –
@R.Zagórskiエラーはありません。問題は、SyncDoctorのonNextが呼び出されていないことです。代わりに、SyncAllのonNextが2回コールされました! – MBH
DAOのすべての操作が同期していると仮定して、すべての操作をメインスレッドで実行してもよろしいですか? – marwinXXII