2016-08-17 14 views
2

私は、内部ストレージに保存する必要があるURI(フィールド)としてイメージを持つ製品のリストを持っています。mainThread内で呼び出されたObserver.onNextの内部でIO操作を実行する方法

  1. 私はにそれらを保存する必要がWSからのデータを得たとき、私は改造 RestClient.getClient().getProducts()

  2. を使用してWSからのデータを得た:私は、現在のコードでそれを行う方法を見つけることができませんでした問題レルムDB

  3. レルムDBにイメージを保存した後、内部ストレージにイメージを保存しようとしましたが、がmainThreadの内部で呼び出されたためにできません。

    public void getProductsHandler(final Context context) { 
    MyApplication application = MyApplication.get(context); 
    
    rx.Observable<ProductResponse> faq = RestClient.getClient() 
        .getProducts() 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribeOn(application.defaultSubscribeScheduler()); 
    
    faq.subscribe(new Observer<ProductResponse>() { 
        @Override public void onCompleted() { 
        } 
    
        @Override public void onError(Throwable e) { 
    
        } 
    
        @Override public void onNext(ProductResponse response) { 
        RealmService realmService = new RealmService(realm); 
        realmService.setProducts(response.getResults()); 
    
        ((MainActivity) context).saveBannersIntoInternal(response.getResults()); 
    
        } 
    }); 
    } 
    

どれでも良い解決策?

+0

もし私が 'Thread'sを作成して起動するのに何か起きているのであれば? – Elltz

+1

@ Super-califragilistic私は同じ解決策だと思ったが、できるだけうまくいくと思った。 – Abdellah

+0

rx演算子をアクション連鎖のために使用すると、あなたのケースで'flatMap' – zella

答えて

0

flatMapを使用して、WebサービスコールとDBに保存する2つの操作を連鎖させます。

RestClient.getClient().getProducts() 
    .flatMap(response -> saveToDB()) 
    .subscribeOn(Schedulers.io()); 

最後subscribeOn(Schedulers.io())コールは、レトロフィットコールとIOスケジューラ上flatMap実行の両方をできるようになります。

関連する問題