2017-09-04 5 views
-3

onResponse()で応答を取得しています。応答の時間を改善する方法は?改造呼び出しからの応答が遅すぎ、ヌルリストを返します。

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メソッド内からアクティビティを開始しないのですか? onResponse()メソッドが別のクラスに含まれていたために – joao86

+0

が返されました。 –

答えて

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); 
関連する問題