Модернизировать, возвращать ноль вне метода onResponse? - PullRequest
0 голосов
/ 14 октября 2019

В методе 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 голосов
/ 14 октября 2019

Проблема, как вы сказали, не ждет ответа. Что вам нужно знать, что enqueue () вызывает запрос в другом потоке, поэтому ваш код выполняет запрос в другом потоке, чем вызовы return.

Если вам нужно дождаться ответа, чтобы вернуть ответтело с использованием execute () вместо enqueue ()

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

примечание: это не должно выполняться в потоке пользовательского интерфейса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...