2017-12-07 1 views
0

データベースにデータを保存しようとしています。メソッドを追加するために、私はCompletableを使います。 1つのエンティティ - 顧客を保存した後、顧客の保存後にのみ、日のリストを保存します。これは今私のコードです。別のCompletableを実行した後にCompletableのリストをチェーンする方法

mDatabaseManager.addCustomer(customer) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribeOn(Schedulers.io()) 
       .subscribe(() -> { 
        for (Day day : days) { 
         mDatabaseManager.addDay(day) 
           .subscribeOn(Schedulers.io()) 
           .subscribe(() -> {}); 
        } 
       }); 

それは動作しますが、時々、私はエラーを取得する:

io.reactivex.exceptions.OnErrorNotImplementedException: FOREIGN KEY constraint failed (code 787) 

そして、私はまた、これはそれを行うにはどのように適切な方法ではないと私はcompletableをチェーンする必要があることを学びました。 concatWithとandThen演算子が見つかりましたが、このコードを書き換えることはできません。誰も私にどのように表示することができますか?

+0

「flatMap」が疑わしいときは? –

答えて

1

andThendaysのリストはObservableにラップされ、concatMapCompletableを順番に挿入することができます。

mDatabaseManager.addCustomer(customer) 
      .subscribeOn(Schedulers.io()) 
      .andThen(
       Observable.fromIterable(days) 
       .concatMapCompletable(day -> 
         mDatabaseManager.addDay(day) 
         .subscribeOn(Schedulers.io()) 
       ) 
      ) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(); 
関連する問題