【问题标题】:Retrofit return null outside the onResponse method?改造在onResponse方法之外返回null?
【发布时间】:2020-02-10 13:20:46
【问题描述】:

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

【问题讨论】:

    标签: java android web-services retrofit retrofit2


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      相关资源
      最近更新 更多