改造调用的响应太慢,返回空列表 [英] The response from the retrofit call is too slow and it returns a null list

查看:102
本文介绍了改造调用的响应太慢,返回空列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在onResponse()中将响应获取为null。

Getting response as null in onResponse(). How to improve time duration for response?

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毫秒。
这是代码中需要列表的部分:

Anyone can help me with a solution to get the list after onResponse method. The duration of the onResponse method has about 400 ms. This is the part of the code where I need the list:

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

谢谢。

推荐答案

我使用ReactiveX解决了该问题。另一个解决方案是使用onResponse()方法进行回调。

I used ReactiveX to solve the problem. Another solution was a callback from onResponse() method.

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

这篇关于改造调用的响应太慢,返回空列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆