#java #android #retrofit
Не могу получить данные из onResponse. public void loadData() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(myurl) .addConverterFactory(GsonConverterFactory.create()) .build(); RESTPK service = retrofit.create(RESTPK.class); Callcall = 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-потока и из асинхронного ответа
Комментариев нет:
Отправить комментарий