Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android JSON请求填充数组_Android_Json - Fatal编程技术网

Android JSON请求填充数组

Android JSON请求填充数组,android,json,Android,Json,我遵循了这个教程 作者通过在回调中设置textview,直接使用回调中的数据。我想做的是用我从请求中得到的响应填充一个数组,然后能够在其他地方使用该数组,因为响应侦听器是一个匿名的内部类,我不知道如何从中获取数据;任何试图分配给侦听器内部数组的尝试都被证明是徒劳的 谢谢,请耐心听我说,我还是个初学者 听众: JsonArrayRequest req = new JsonArrayRequest(urlJsonArry, new Response.Listener<JSONA

我遵循了这个教程

作者通过在回调中设置textview,直接使用回调中的数据。我想做的是用我从请求中得到的响应填充一个数组,然后能够在其他地方使用该数组,因为响应侦听器是一个匿名的内部类,我不知道如何从中获取数据;任何试图分配给侦听器内部数组的尝试都被证明是徒劳的

谢谢,请耐心听我说,我还是个初学者

听众:

JsonArrayRequest req = new JsonArrayRequest(urlJsonArry,
        new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.d(TAG, response.toString());

                try {
                    // Parsing json array response
                    // loop through each json object
                    jsonResponse = "";
                    for (int i = 0; i < response.length(); i++) {

                        JSONObject person = (JSONObject) response
                                .get(i);

                        String name = person.getString("name");
                        String email = person.getString("email");
                        JSONObject phone = person
                                .getJSONObject("phone");
                        String home = phone.getString("home");
                        String mobile = phone.getString("mobile");

                        jsonResponse += "Name: " + name + "\n\n";
                        jsonResponse += "Email: " + email + "\n\n";
                        jsonResponse += "Home: " + home + "\n\n";
                        jsonResponse += "Mobile: " + mobile + "\n\n\n";

                    }

                    txtResponse.setText(jsonResponse);

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(),
                            "Error: " + e.getMessage(),
                            Toast.LENGTH_LONG).show();
                }

                hidepDialog();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                hidepDialog();
            }
        });
编辑:下面的代码概述了我遇到的问题。我知道这可能是由于我的误解或误用,但仍然

private void makeJsonArrayRequest(String url){

    //ONLY WAY TO ACCESS INSIDE LISTENER IS TO MAKE FINAL

    final ArrayList<String> string = new ArrayList<>();

    showpDialog();
    JsonArrayRequest req = new JsonArrayRequest(
            url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    try {
                        for (int i = 0; i < response.length(); i++) {
                            JSONObject field = (JSONObject) response.get(i);
                            string.add(i,  field.getString("title"));

                            //THIS PRINTS OUT ALL MY TITLES CORRECTLY, SHOWING THAT 
                            //THE STRINGS ARRAY IS POPULATED IN THIS SCOPE

                            Log.d(AppController.TAG, string.get(i));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(context,
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
                    hidepDialog();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(AppController.TAG, "Error: " + error.getMessage());
                    Toast.makeText(context,
                    error.getMessage(), Toast.LENGTH_SHORT).show();
                 hidepDialog();
                }
            }
    );

    AppController.getInstance().addToRequestQueue(req);

    //THIS CAUSES AN OUT OF BOUNDS EXCEPTION, AS IT THINKS THE ARRAY HAS NOT BEEN POPULATED

    Log.d(AppController.TAG, string.get(3));
}

我认为问题在于使用变量字符串作为OnResponse中实际字符串的副本

尝试将静态添加到此变量:

 final static ArrayList<String> string = new ArrayList<>();