在onResponse方法之外,改型返回null?

时间:2019-10-13 21:26:30

标签: java android web-services retrofit retrofit2

onResponse方法中,日志返回一个值,但是在其外部,它返回null,也许它不等待响应完成,这可能是问题所在吗?

private  MovieResponse AsyncRequest() {
    Retrofit mRetrofit;
    MyWebService mService;
    mRetrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_API_URL)
            .addConverterFactory(GsonConverterFactory.create(new Gson()))
            .build();
    mService = mRetrofit.create(MyWebService.class);
    mService.discoverPopularMovie(Constants.MOVIEDB_APIKEY).enqueue(new Callback<MovieResponse>() {
        @Override
        public void onResponse(@NonNull Call<MovieResponse> call, @NonNull Response<MovieResponse> response) {
            MovieResponse body = response.body();
            movieResponse = body ;
            Log.i(TAG, "onResponse: "+ " movieResponse "+ "HERE" +movieResponse);
        }
        @Override
        public void onFailure(Call<MovieResponse> call, Throwable t) {
            Toast.makeText(context, " failure", Toast.LENGTH_SHORT).show();
            t.printStackTrace();
        }
    });
    return movieResponse ;
}

1 个答案:

答案 0 :(得分:0)

您所说的问题,它不等待响应。 您需要知道enqueue()在另一个线程中调用该请求,因此您的代码在与return调用不同的线程中运行该请求。

如果您需要等待响应以使用execute()而不是enqueue()返回响应主体

    try {
            Response<MovieResponse> = mService.discoverPopularMovie(Constants.MOVIEDB_APIKEY).execute();
        } catch (IOException e) {
            e.printStackTrace();
        }

注意:这不能在UI线程中运行