2017-09-04 24 views
-3

在onResponse()中将响应设为null。如何提高响应时间?来自改造呼叫的响应太慢,它返回空列表

public class RequestClass { 

private static final String TAG = RequestClass.class.getSimpleName(); 
private final static String API_KEY = "apikey"; 
static ApiInterface apiService = 
     ApiClient.getClient().create(ApiInterface.class); 

static public List<Movie> getTopMovies(String page) { 
    final List<Movie> lowDetailMovies = new ArrayList<Movie>(); 
    Call<MoviesResponse> call = apiService.getTopRatedMovies(API_KEY, page); 
    call.enqueue(new Callback<MoviesResponse>() { 
     @Override 
     public void onResponse(Call<MoviesResponse> call, Response<MoviesResponse> response) { 
      List<DBMovie> movies = response.body().getResults(); 

      for (DBMovie movie : movies) { 
       String[] genres = new String[6]; 
       int i = 0; 
       for (int gen : movie.getGenreIds()) 
        genres[i++] = gen + ""; 
       lowDetailMovies.add(new Movie(movie.getId(), Double.toString(movie.getVote_average()), movie.getTitle(), movie.getTitle(), movie.getPoster_path(), movie.getOriginal_language(), 
         movie.getOriginal_title(), genres, movie.getOverview(), movie.getRelease_date(), false, false)); 
      } 
     } 

     @Override 
     public void onFailure(Call<MoviesResponse> call, Throwable t) { 
      Log.e(TAG, t.toString()); 
     } 
    }); 


    return lowDetailMovies; 
} 


} 

任何人都可以通过解决方案来帮助我获得onResponse方法后的列表。 onResponse方法的持续时间约为400毫秒。 这是代码的一部分,我需要的列表:

@OnClick(R.id.popular_button) 
public void showPopularMovies(View view) { 
    List<Movie> movies; 

    movies = RequestClass.getTopMovies("1"); 

    Intent intent = new Intent(MainActivity.this, VODActivity.class); 
    Collections.sort(movies, Util.compareByPopularityAscending); 

    Bundle bundle = new Bundle(); 
    bundle.putSerializable(Constants.bundleMovieKey, (Serializable) movies); 
    bundle.putString(Constants.bundleVodActivityTitle, Constants.PopularMoviesTitle); 
    intent.putExtras(bundle); 

    startActivity(intent); 
} 

谢谢。

+1

你为什么不从onResponse方法开始活动? – joao86

+0

,因为onResponse()方法在另一个类中。 –

回答

0

我用ReactiveX解决了这个问题。另一个解决方案是从onResponse()方法的回调。

ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class); 
    apiService.getTopRatedMovies(Constants.API_KEY, Constants.FIRST_PAGE) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(popularMoviesSubscriber);