2016-07-02 2 views
1

私はネットワークからデータを受け取りましたが、その部分を実装しましたが、他のスレッドのサーバからデータを受け取った後、私はメインスレッドではなく、データを保存したいので、 DBの挿入を呼び出すmethod.Hereが私のコードあなたはこのようなあなたのDBに、受信したデータを挿入するためにdoOnNext()を使用することができますRxAndroidを使用して、ネットワークからデータを受け取った後、(どのメソッドで)データ挿入部分をDBで呼び出すべきですか?

Observable<List<PhotoAlbum>> searchResponseObservable = 
      mService.getAPI().getAlbums().subscribeOn(Schedulers.newThread()) 
        .observeOn(AndroidSchedulers.mainThread()); 

    searchResponseObservable.subscribe(new Observer<List<PhotoAlbum>>() { 
     @Override 
     public void onCompleted() { 
      Log.i("test","onComplete"); 
     } 

     @Override 
     public void onError(Throwable e) { 
      Log.i("test","onComplete"); 
     } 

     @Override 
     public void onNext(List<PhotoAlbum> photoAlbums) { 
      view().showSearchResult(photoAlbums); 

     } 
    }); 

答えて

1

です:データベースに保存し、スケジューラIO(スケジューラを使用する

Observable<List<PhotoAlbum>> searchResponseObservable = mService.getAPI() 
         .getAlbums() 
         .subscribeOn(Schedulers.newThread()) 
         .doOnNext(photoAlbums -> insertIntoDb(photoAlbums)) 
         .observeOn(AndroidSchedulers.mainThread()); 

     searchResponseObservable.subscribe(new Observer<List<PhotoAlbum>>() { 
      @Override 
      public void onCompleted() { 
       Log.i("test","onComplete"); 
      } 

      @Override 
      public void onError(Throwable e) { 
       Log.i("test","onComplete"); 
      } 

      @Override 
      public void onNext(List<PhotoAlbum> photoAlbums) { 
       view().showSearchResult(photoAlbums); 
      } 
     }); 
0

使用flatMap .io())バックグラウンドプロセス

mService.getAPI().getAlbums().flatMap(new Func1<List<PhotoAlbum>, Observable<GetDriversResponse>>() { 
       @Override 
       public Observable<GetDriversResponse> call(GetDriversResponse mResponse) { 
        return mDatabaseHelper.setMyBus(mResponse); 
       } 
      }).subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<GetDriversResponse>() { 
         @Override 
         public void call(List<PhotoAlbum> photoAlbums{view().showSearchResult(photoAlbums); }}, new Action1<Throwable>() { 
         @Override 
         public void call(Throwable throwable) {  
          throwable.printTrack 
         } 
        })); 
関連する問題