在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 ;
}
答案 0 :(得分:0)
您所说的问题,它不等待响应。 您需要知道enqueue()在另一个线程中调用该请求,因此您的代码在与return调用不同的线程中运行该请求。
如果您需要等待响应以使用execute()而不是enqueue()返回响应主体
try {
Response<MovieResponse> = mService.discoverPopularMovie(Constants.MOVIEDB_APIKEY).execute();
} catch (IOException e) {
e.printStackTrace();
}
注意:这不能在UI线程中运行