2016-03-24 6 views
0

私はRxJavaプログラミングの初心者ですが、私は改造呼び出しから持っているリストの各繰り返しをどのように処理するかについて質問したいと思います。予定のAndroidでretrofitを使用してrxjava内のアイテムリストの各反復処理を処理する方法

  1. のGetリスト
  2. 反復はそれぞれ任命し、
  3. ここ

が私のコードでpatient_idと

  • は、予定のリストに戻って変換subservice_idを得る:基本的に私は何をしたいですこれまで

    Observable<List<Appointment>> callAppointments = appointmentServiceRx.getService().getConfirmedAppointments(user_id); 
        callAppointments.subscribeOn(Schedulers.io()) 
          .observeOn(AndroidSchedulers.mainThread()) 
          .flatMapIterable(apps -> apps) 
          .concatMap(app -> getPatientById(app) 
            .doOnNext(this::addPatientNames) 
            .map(patient -> app) 
          ).concatMap(app -> getSubserviceById(app) 
            .doOnNext(this::addSubserviceNames) 
            .map(subservice -> app) 
          ).toList() 
          .subscribe(res -> doStuff(), 
            throwable -> showThrowable()); 
    

  • +0

    あなたのコードは何をしますか?どのように短くなりますか? –

    +0

    @MatthewCliatt基本的に私はcallAppointments observableを使用して予定のリストを取得したいと思います。リストの各項目を取得してpatient_idを取得し、patient_idの患者を取得し、addPatientNamesを使用して患者名を保存します。それから私は今度はサブサービスを得るためにそれを観測可能な予定に戻したい(患者と同じ行動で)。最後に、私は予定のリストを戻したいと思います。それはスローされ、私はどこが間違っているのか分からない。 –

    +0

    はい、** **は何を投げますか? 'getPatientById()'と 'getSubserviceById()'もネットワークコールであると仮定すると、 'subscribe()'の直上に別の 'observeOn(AndroidSchedulers.mainThread())'が必要になるかもしれません。 –

    答えて

    0

    observeOn(AndroidSchedulers.mainThread())最初にコールすると、以降のすべての演算子がメインスレッド上で実行され、次にNetworkOnMainThreadExceptionがスローされます。

    subscribe前の最後の点にこの呼び出しを移動してみてください:

    // ... 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(res -> doStuff(), 
        throwable -> showThrowable()); 
    
    +0

    ありがとうございます。それは今働く。 –