我需要调用一个需要字符串数组作为 POST 参数的 api。因此,对于 API 定义的示例:

POST api/names

预期的 POST 参数是一个名称数组和一些其他属性,如下所示:
{ names: [ "John", "Bill" ], department: "Engineering" }

我目前正在使用 Android 文档中描述的自定义 Volley 框架,但似乎来自 Volley 的参数只能作为 Map of (String, String as key and value) 传递。我已经有了我的 Android 应用程序中的数组,可以作为 post 参数传递,但是这个 Volley 需要一个字符串。

我尝试使用 Arrays.toString(myStringArray) 转换我的数组并像下面一样传递它,但它不起作用。
String[] namesArray = new String[1];
namesArray[0] = "Bill";

Map<String, String> mapParams = new HashMap<String, String>();
mapParams.put("department", "Computer Science");
mapParams.put("names", Arrays.toString(namesArray));

// Then call the Volley here passing the mapParams.

当我只能使用来自 Volley 的字符串时,如何调用需要数组字符串的 api?

最佳答案

我会给你完整的代码,通过 POST 方法在 volley 上发布 JsonObject。

JSONObject js = new JSONObject();
    try {
        js.put("genderType", "MALE");
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    String url = "LINK TO POST/";

    // Make request for JSONObject
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(
            Request.Method.POST, url, js,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    Log.e(TAG, "Response_Code from Volley" + "\n" + response.toString() + " i am king");
                }
            }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.e(TAG, "Error: " + error.getMessage());
            NetworkResponse response = error.networkResponse;
            if (error instanceof ServerError && response != null) {
                try {
                    String res = new String(response.data,
                            HttpHeaderParser.parseCharset(response.headers, "utf-8"));
                    // Now you can use any deserializer to make sense of data
                    Log.e(TAG, "onErrorResponse: of uploadUser" + res);
                    //   JSONObject obj = new JSONObject(res);
                } catch (UnsupportedEncodingException e1) {
                    // Couldn't properly decode data to string
                    e1.printStackTrace();
                }
            }
        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            return headers;
        }
    };
    Log.e(TAG, "uploadUser:  near volley new request ");
    // Adding request to request queue
    Volley.newRequestQueue(this).add(jsonObjReq);

}

将您需要的任何内容放入带有键及其值的 js 对象中

关于Android Volley POST 参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36728092/

10-12 02:40