2017-12-06 5 views
0

私は自分のプロジェクトでretrofit2を使用しています。どのように私は実現しなければならない場所(活動/断片/シングルトン)改造から観察可能か?

public interface ProductService { 
    @POST("findProducts") 
    Observable<ProductsResponse> getProducts(); 
} 

とサービス方法::私は私のフラグメントでこのサービスを使用する。その後

public ProductService getProductService() { 
     return getService(ProductService.class); 
    } 

私はインターフェイスを持っています。

@Override 
     public void onClick(View view) { 
      if (view.getId() == R.id.button) { 
       RestApiFactory.getInstance().getProductService().getProducts() 
         .subscribeOn(Schedulers.io()) 
         .observeOn(AndroidSchedulers.mainThread()) 
         .subscribe(new ProductHandler()); 
      } 
     } 

この断片でハンドラを実現::私はボタンにクリックすると、私は、このメソッドを呼び出す

private class ProductHandler implements Observer<ProductsResponse> { 

     @Override 
     public void onSubscribe(Disposable d) { 
      Log.d(TAG, "onSubscribe: start"); 
      progressBar.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onNext(ProductsResponse value) { 
      //save to DB in new Thread 
     } 

     @Override 
     public void onError(Throwable e) { 
      Log.d(TAG, "onError: "+ e.getMessage()); 
      price.setVisibility(View.INVISIBLE); 
      progressBar.setVisibility(View.INVISIBLE); 

     } 

     @Override 
     public void onComplete() { 
      Log.d(TAG, "onComplete: finish"); 
      price.setVisibility(View.INVISIBLE); 
      progressBar.setVisibility(View.INVISIBLE); 
     } 
    } 

ProductHandler implements Observer<ProductsResponse>のメソッドフラグメントで

onSubscribe 
onNext 
onError 
onComplete 

を実装することが正しいのですか?

私はシングルトンにこれを移動することをお勧めしています:

MySingleton.getInstanse().getData(); 

と移動し、すべてのgetDataへ:

public void getData(){ 
RestApiFactory.getInstance().getProductService().getProducts() 
          .subscribeOn(Schedulers.io()) 
          .observeOn(AndroidSchedulers.mainThread()) 
          .subscribe(new Observer<ProductsResponse>() { 
         @Override 
         public void onSubscribe(Disposable d) { 
          //send broadcast and catch in Fragment 
         } 

         @Override 
         public void onNext(ProductsResponse productsResponse) { 
         //send broadcast and catch in Fragment 
         } 

         @Override 
         public void onError(Throwable e) { 
         //send broadcast and catch in Fragment 
         } 

         @Override 
         public void onComplete() { 
         //send broadcast and catch in Fragment 
         } 
        }); 
} 

が、私は、これはナンセンスだと思います。誰があなたにどのように使用するかを教えてくれるでしょう(どこの場所で)Observableretrofitから?

答えて

-1

Observerを実装する必要はありません。同じオブザーバを作成する必要があります。例を参照してください。

service.getProducts() 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(mObserver); 
    } 

オブザーバーは次のようになりますし、OnCreate関数で初期化する必要があります。

mObserver = new Observer<ProductsResponse>() { 
      @Override 
      public void onSubscribe(Disposable d) { 
       mDisposableList.add(d); 
      } 

      @Override 
      public void onNext(ProductsResponse value) { 

      @Override 
      public void onError(Throwable e) { 
       e.printStackTrace(); 
      } 

      @Override 
      public void onComplete() { 
      } 
     }; 
関連する問題