从jsonarray请求填充的Arraylist

时间:2016-08-22 12:24:03

标签: java android arraylist

我有一个返回arraylist的方法,它是从jsonarray填充的 jsonrequest工作正常,但是当我调用该方法时,arraylist返回大小为0,即使它被填充。 下面是代码,我做错了什么

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;
}

2 个答案:

答案 0 :(得分:0)

当你得到响应时调用onSuccess()意味着AsynHttp调用在另一个线程中完成,所以你的返回语句在onSucess之前调用,这就是为什么size为0。

您可以在调试器上验证它

我的建议是从onSuccess()调用一个方法,这样你就会得到Arraylist

答案 1 :(得分:0)

如果你在一个班级里做所有事情

public void populateList(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));
                    }

              onListPopulated(myList);

                }

                @Override
                public void onFailure(int statusCode, Throwable throwable, JSONObject error) {

                }
            });

}

使用列表

执行某些操作的方法
public void onListPopulated(ArrayList<String> list)
{
//do something with the list
}