将数组数据作为参数volley传递

时间:2016-09-13 04:27:26

标签: android arrays json android-volley

我的数组看起来像这样

arrayname[{"code" : "abc","code2":"cba",}]

我希望将其作为参数发送,将其放入getParam()函数中,并使用volley到我的服务器

问题看起来与此相似

Volley pass array as parameters

任何帮助怎么做?

提前致谢

3 个答案:

答案 0 :(得分:1)

这是我制作的应用程序中的一种方法,可以执行您要执行的操作。 (我想?)

我的问题是我有多个要发送的帖子参数,但其中一个是数组。

例如:

http://www.yourDB.com/getData.php?param1=blah&param2=blah&param3=[ [array] ].

所以......为了确保PHP页面能够理解我正在发送数组,我按如下方式向数组中添加数据(注意参数后面的'[]'。

postParams.add(new String[]{"param3[]", itemName});

所以......服务器看到了这个:

http://www.yourDB.com/getData.php?param1=blah&param2=blah&param3[]=item1&param3[]=item2&param3[]=item3...

理解的关键是这一部分:

"@Override
        public byte[] getBody() throws AuthFailureError {"

诀窍是你将String数组的ArrayList发送到方法中并覆盖getBody()部分,如下所示:

private void Url_2_Adapter(String url, final ArrayList<String[]> postParams) {

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    // do something with response

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // Log.i(TAG, "WE HAD ERROR " + error.toString());

            try {
                Toast.makeText(getActivity(), "Server says: Error code " + error.networkResponse.statusCode + "\nIf this continues, please report it! Thanks.", Toast.LENGTH_LONG).show();
            }

            catch (Exception e){

            }

        }
    }) {
        @Override
        public byte[] getBody() throws AuthFailureError {

            StringBuilder result = new StringBuilder();
            boolean first = true;

            for (String[] entry : postParams)
            {
                if (first) {
                    first = false;
                } else {
                    result.append("&");
                }
                try {
                    result.append(URLEncoder.encode(entry[0], "UTF-8"));
                    result.append("=");
                    result.append(URLEncoder.encode(entry[1], "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    // this basically will never happen :)
                }
            }
            return result.toString().getBytes();
        }
    };
    Z_VolleySingleton.getInstance().getRequestQueue().add(stringRequest);

}

答案 1 :(得分:0)

我没有参与Volley库,我使用了AsyncHttpClient:你可以在这里应用的逻辑如下:

JSONArray jsonArray=new JSONArray();
JSONObject jsonObject=new JSONObject(); 
jsonObject.put("code", abc);
jsonObject.put("code2", cba);
jsonArray.put(jsonObject);// this you need to pass using volley library

答案 2 :(得分:0)

为此,您必须制作JsonArrayRequest。在Volley中,JsonArrayRequest类使用该类用于JsonArray请求。

这是JsonArrayRequest类中可用的方法。

public JsonArrayRequest(int method, String url, JSONArray jsonRequest, 
            Listener<JSONArray> listener, ErrorListener errorListener) {
        super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
                errorListener);
    }

这可能会对你有所帮助:

JSONArray jArrayInput=new JSONArray();
JSONObject jObjectInput=new JSONObject(); 
jObjectInput.put("code", abc);
jObjectInput.put("code2", cba);
jArrayInput.put(jObjectInput);

JsonArrayRequest request = new JsonArrayRequest(Method.POST, /*Your base url*/, jArrayInput , new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    //Here success response
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                   //Here error response
                }
            });
            MyVolley.getRequestQueue().add(request);