2015-01-21 4 views
6

मैं रेट्रोफिट लाइब्रेरी का उपयोग कर रहा हूं। कॉलबैक सफलता विधि कॉल करने से पहले मैं प्रोग्रेसबार का उपयोग कैसे कर सकता हूं?मैं प्रोग्रेसबार के साथ रेट्रोफिट लाइब्रेरी का उपयोग कैसे कर सकता हूं?

public void getMovies() { 

     ProgressDialog mProgressDialog = new ProgressDialog(this); 
     mProgressDialog.setIndeterminate(true); 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.show(); 
     MovieClient.getWeather().movies(MovieClient.getRandomMovie(), new Callback<MovieRequest>() { 
     @Override 
     public void success(MovieRequest movieRequest, Response response) { 

     Picasso.with(getApplicationContext()).load(movieRequest.getPoster()).into(image); 

     if (mProgressDialog.isShowing()) 
      mProgressDialog.dismiss(); 


    } 

     @Override 
     public void failure(RetrofitError error) { 
      if (mProgressDialog.isShowing()) 
      mProgressDialog.dismiss(); 

      Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

उत्तर

20

आप इसे इस तरह से उपयोग कर सकते हैं। आइडिया: रैपर देखने योग्य बनाने के बाद 2 क्रिया "प्रारंभ करें" & "खत्म करें" जोड़ें।

public static <T> Observable<T> bindLoadingAction(final Runnable start, final Runnable finish, final Observable<T> source) { 
    final Observable<T> o = source.observeOn(AndroidSchedulers.mainThread()); 
    return o.lift(new Observable.Operator<T, T>() { 
     @Override 
     public Subscriber<? super T> call(final Subscriber<? super T> child) { 
      return new Subscriber<T>() { 
       @Override 
       public void onStart() { 
        super.onStart(); 
        if (start != null) { 
         new Handler(Looper.getMainLooper()).post(start::run); 
        } 
        child.onStart(); 
       } 

       @Override 
       public void onCompleted() { 
        if (finish != null) { 
         finish.run(); 
        } 
        child.onCompleted(); 
       } 

       @Override 
       public void onError(Throwable e) { 
        if (finish != null) { 
         finish.run(); 
        } 
        child.onError(e); 
       } 

       @Override 
       public void onNext(T t) { 
        if (finish != null) { 
         finish.run(); 
        } 
        child.onNext(t); 
       } 
      }; 
     } 
    }); 
} 

उपयोग:

bindLoadingAction(this::showLoadingView, this::hideLoadingView, YourRetrofitObservable); 

+0

यह काम कर रहा है (।। मैं जावा 8 वाक्य रचना इस :: showLoadingView वर्तमान कक्षा में showLoadingView विधि के संदर्भ में अर्थ का इस्तेमाल किया)? मेरे पास बिल्कुल वही संरचना है लेकिन जब ईवेंट ट्रिगर होता है तो मेरा ऐप क्रैश हो जाता है – LKM

2

आप शायद इस विधि util की जाँच करें:

public void getMovies() { 

    MovieClient.getWeather().movies(MovieClient.getRandomMovie(), new Callback<MovieRequest>() { 
     @Override 
     public void success(MovieRequest movieRequest, Response response) { 

      Picasso.with(getApplicationContext()).load(movieRequest.getPoster()).into(image); 

     } 

     @Override 
     public void failure(RetrofitError error) { 
      Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे