2017-12-06 5 views
0

프로젝트에서 retrofit2를 사용합니다.내가 구현해야하는 장소 (활동/단편/싱글 톤)에서 개조 할 때 관찰 가능합니까?

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

및 서비스 방법 : 내 조각에서이 서비스를 사용하여 그 후

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

나는 인터페이스를 가지고있다. ProductHandler implements Observer<ProductsResponse>의 방법

조각에
onSubscribe 
onNext 
onError 
onComplete 

을 구현하기 위해

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); 
     } 
    } 

이 올바른지를 : 나는 버튼을 클릭하면 나는이 메서드를 호출 :

@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()); 
      } 
     } 

을이 단편에서 핸들러를 실현?

나는 싱글이 이동하는 것이 좋습니다 해요 :

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를 구현할 필요가 없습니다. 동일한 관찰자를 만들면됩니다. 예제를 보시기 바랍니다. 관찰자가 같이해야하며, 한 OnCreate에서 초기화해야합니다

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

:

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() { 
      } 
     };