2015-01-21 12 views
6

Używam biblioteki retrofitu. Jak mogę użyć progressbar przed wywołaniem metody oddzwaniania?Jak mogę użyć biblioteki modernizacji z paskiem postępu?

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

     } 
    }); 
} 

Odpowiedz

20

można użyć go w ten sposób:

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

     } 
    }); 
} 
+0

to działa? Mam dokładnie taką samą strukturę, ale moja aplikacja ulega awarii po uruchomieniu zdarzenia – LKM

2

Użytkownik może sprawdzić tę metodę util. Pomysł: utwórz opakowanie observable, a następnie dodaj 2 akcję "start" & "zakończyć".

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

Zastosowanie:

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

(użyłem Java 8 składnia :: showLoadingView co oznacza odniesienie do metody showLoadingView w obecnej klasie..)

Powiązane problemy