Мой список в моей деятельности под названием AllStores
содержит всего лишь null. Мне нужен этот список, потому что я хочу позже заполнить свой ListView. Проблема вызвана тем, что мой обратный вызов выполняется как последний.Пытается получить Дооснащение onResponse выполнено
Для уточнения я сделал скриншот ниже:
Ссылка: http://i.imgur.com/bIkWjld.png
скриншот также говорит, что я на самом деле хочу. Чтобы добиться этого, я попробовал его с помощью AsyncTask
. Однако это не сработало, как вы можете видеть на скриншоте.
Вот код:
EDIT 2,0 я изменил свое getSubprise()
метод становятся синхронными и использованием AsyncTask
AllStores.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Response<List<Store>> subprises = new StoreService().getSubprises();
System.out.println("AllStores (Activity) - subprise " + subprises);
}
StoreService.java :
public Response<List<Store>> getSubprises() {
new LongOperation().execute("");
System.out.println("getStores (StoreService.java) value "+ getStores());
return getStores();
}
private class LongOperation extends AsyncTask<String, Void, Response<List<Store>>> {
@Override
protected Response<List<Store>> doInBackground(String... params) {
System.out.println("doInBackground executed second");
try {
Call<List<Store>> call = subpriseAPI.listStores();
stores=call.execute();
Iterator it=stores.body().iterator();
// while(it.hasNext())
// System.out.println(((Store)it.next()).getSTREET());
} catch (IOException e) {
e.printStackTrace();
}
return stores;
}
@Override
protected void onPreExecute() {
//Can't put the call here because this is the main thread
System.out.println("onPreExecute first");
}
@Override
protected void onPostExecute(Response<List<Store>> result) {
//Can't put the call here because this is the main thread
setStores(stores);
}
}
public Response<List<Store>> getStores() {
return stores;
}
public void setStores(Response<List<Store>> stores) {
this.stores = stores;
}
Однако сейчас я все еще получаю тот же результат, увидеть скриншот ниже:
ссылка: http://i.imgur.com/GOGFXMR.png
скриншот выглядит так же, как на скриншоте сверху.
Вы должны действительно прочитать некоторые документы о асинхронном коде и обратных вызовах. Полная асинтеза является бесполезной из-за асинхронного вызова очереди. Ваши загруженные данные будут доступны при вызове onresponse, поэтому есть смысл обновить ui. –
@Andre Classen Да, что вы сказали, действительно так. Но я отредактировал мой вопрос, не могли бы вы ответить на него сейчас :)? – superkytoz
Теперь вы изменили вызов очереди, который был асинхронным, на синхронный вызов execeute. Исключение говорит об этом «NetworkOnMainThreadException». Сетевой вызов должен выполняться в фоновом потоке. Например. вызов doInBackground() в asyncTask. –