2016-07-14 3 views
0

RxAndroidをよりよく理解するために、特にRetrofitと組み合わせてRxAndroidを使用した便利な例が満載のthis Repoが見つかりました。RxAndroid httpリクエストをバックグラウンドで使用してください

したがって、thisのレポを見ると、バックグラウンドで実行されているようなボタンをクリックしてhttpコールを発信できますか?

アクティビティ/フラグメントを表示する必要があると同時に、バックグラウンドでhttpコールを行い、受け取ったデータがあれば表示しますか?

だから例えば私はONSTART

@Override 
public void onStart() { 
    super.onStart(); 

    pomagistoService 
      .getAgenda() 
      .subscribeOn(Schedulers.newThread()) // <- run in background right? 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Observer<List<Appointment>>() { 
       @Override 
       public void onCompleted() { } 

       @Override 
       public void onError(Throwable e) { } 

       @Override 
       public void onNext(List<Appointment> appointments) { 
        // show data in ListView 
       } 
      }); 
} 

でこのフラグメントを持っている私は、このフラグメントを起動した場合、リストビューは瞬時にHTTP呼び出しによって受信されたデータが含まれています。

ここで私が持っている疑問/疑問があります: このhttpコールはバックグラウンドで実行されますか?

フラグメントが出現したときにすぐに存在するデータのために私はこれを尋ねているので、実際には見ることができません。

+1

はいhttpコールはバックグラウンドで実行されます –

+0

@AmitShekharなので、httpコールに5秒かかるとしたら、フラグメントが表示されるのに5秒かかりません。フラグメントはちょうど現れる(データなし)? –

+0

あなたはフラグメントリストビューをonNext()から更新する必要があります –

答えて

0

通常、ネットワーク要求の場合は、Schedulers.newThread()ではなく、Schedulers.io()を使用する必要があります。また、リクエストが実行される前にある程度の遅延を得て、データなしで断片を見るチャンスを得るには、.delay(5, TimeUnit.SECONDS)を使用して呼び出しの前に5秒遅れてください。

0

subscribeOn(Schedulers.io())を使用している場合は、RxJavaにバックグラウンドでジョブを実行するように指示しています(別のスレッド)。 Schedulers.io()は、ネットワークなどのI/O操作に使用されますが、ローカルで実行される長い処理操作にはSchedulers.computation()を使用できます。

observeOn(AndroidSchedulers.mainThread())を使用すると、メインスレッドに最終結果を表示して、それを表示したり、UIイベントを処理したりすることができます。

subscribeOn()observeOn()を使用しているときに混乱することがよくあります。あなたは常にメインスレッドの結果を観察してUIに反映させたい場合があります。

関連する問題