У меня есть метод, который возвращает arraylist, и он заселен из jsonarray jsonrequest отлично работает, но когда я вызываю метод, arraylist возвращает размер 0, даже если он заселен. Ниже приведен код, то, что я делаю неправильноArraylist, заполненный запросом jsonarray
private ArrayList<String> queryRes(String url, String searchString) {
final ArrayList<String> mylist = new ArrayList<>();
AsyncHttpClient client = new AsyncHttpClient();
client.get(url + searchString,
new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONArray jsonArray) {
for(int i =0; i < jsonArray.length(); i++) {
mylist.add(i, jsonArray.optJSONObject(i).optString("id"));
//Check if it is added to the list
Log.d("Try: ", mylist.get(i));
}
}
@Override
public void onFailure(int statusCode, Throwable throwable, JSONObject error) {
}
});
return mylist;
}
пут отладки в mylist.add (я, jsonArray.optJSONObject (я) .optString ("ID")); и проверьте его. –
Асинхронный вызов дает результат после вашего оператора возврата. Единственное возможное решение этой проблемы - ничего не вернуть. Просто создайте свой собственный метод слушателя, а onSuccess вызовите этот метод с помощью вашего arraylist. –
AsynHttp-вызов выполняется в другом потоке, поэтому mylist будет возвращен еще до завершения сетевого вызова, поэтому используйте интерфейс для возврата результата, где вы хотите –