Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Как получить данные из onResponse? Retrofit.

#java #android #retrofit


Не могу получить данные из onResponse.

    public void loadData() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(myurl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RESTPK service = retrofit.create(RESTPK.class);
    Call call = service.loadJsonStr();
    call.enqueue(new Callback() {
        @Override
        public void onResponse(Call call, Response response) {
            pathPoster = response.body().getPath().get(0).get1(); //переменая которую
мне нужно вытащить
            System.out.println(pathPoster);
        }
        @Override
        public void onFailure(Call call, Throwable t) {
        }
    });
}


Если в onResponse вывести на экран переменную pathPoster, то она показывает правильный
результат, но если ее вывести на экран после вызова loadData(), то в ней уже ничего
нет и приложение вылетает с ошибкой. Получить данные получил, но пользоваться ими не
получается.

    loadData();
    System.out.println(pathPoster);


ошибка: 

FATAL EXCEPTION: mainjava.lang.RuntimeException: Unable to start activity ComponentInfo{com.awesomedevelop.recyclerview/com.awesomedevelop.recyclerview.MainActivity}:
java.lang.NullPointerException

    


Ответы

Ответ 1



Потому что у тебя асинхронный запрос. onResponse вызывается после загрузки информации, а System.out.println(pathPoster) вызывается до загрузки, судя по твоему коду. То есть, когда информация еще не успела загрузиться из сети. А падает потому что строка в которую ты не записал еще данные по-умолчанию null. Либо делай синхронный запрос, либо все действия после загрузки выполняй в onResponse. Если переделаешь на синхронный запрос, учти, что синхронные запросы в сеть, нельзя делать в Ui потоке приложения. http://square.github.io/retrofit/2.x/retrofit/

Ответ 2



Проще всего работать через Singleton-класс, к которому можно будет обратиться и из UI-потока и из асинхронного ответа

Комментариев нет:

Отправить комментарий