我需要调用一个需要字符串数组作为 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/