Страницы

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

четверг, 30 мая 2019 г.

Как получить данные из onResponse? 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


Ответ

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

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

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