有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

根据jsonarray请求填充java 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) 个答案

  1. # 1 楼答案

    当得到响应时调用onSuccess()意味着AsynHttp调用在另一个线程中完成,所以在onSuccess之前调用return语句,这就是大小为0的原因

    您可以在调试器上验证它

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

  2. # 2 楼答案

    如果你在一节课上做每件事

    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
    }