chr*_*ris 9 android json android-volley jsonobjectrequest
我正在使用volley进行json解析.我想使用POST向服务器端发送一些数据.我想发送.现在任何人都可以告诉我如何将过滤器阵列发送到服务器?
以下是我的代码段.我也尝试Hashmap和Jsonobject.但得到这个错误.
错误:
org.json.JSONException: Value at Data of type java.lang.String cannot be converted to JSONObject
Run Code Online (Sandbox Code Playgroud)
格式
{
"typeName": "MANUFACTURER",
"typeId": 22,
"cityId": 308,
"sortBy": "productname",
"sortOrder": "desc",
"filter":[
{
"filterId":101,
"typeName":"CAT_ID",
"filterId":102,
"typeName":"CAT_ID"
}
]
}
Run Code Online (Sandbox Code Playgroud)
对于Code Check pastie
Kun*_*unu 10
如果您在调用API时遇到问题,那么这将对您有所帮助.
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jobReq = new JsonObjectRequest(Request.Method.POST, url, jObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
queue.add(jobReq);
Run Code Online (Sandbox Code Playgroud)
其中jObject是您要发送到服务器的JSON数据.
JSONArray的实现类似.而不是JsonObjectRequest使用JsonArrayRequest并发送jArray而不是jObject.
对于创建json数组,只需做一点调整
JSONArray array=new JSONArray();
for(int i=0;i<filter_items.size();i++){
JSONObject obj=new JSONObject();
try {
obj.put("filterId",filter_items.get(i));
obj.put("typeName","CAT_ID");
} catch (JSONException e) {
e.printStackTrace();
}
array.put(obj);
}
Run Code Online (Sandbox Code Playgroud)
最后添加json数组如下
jsonParams.put("filter",array);
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您将Json数组转换为字符串
小智 6
我使用下面的代码将 JSONArray 发布到 volley。您必须使用 JsonArrayRequest 并直接传递 JSON 数组,而无需将其添加到任何 JSONObject。还要记住重写“parseNetworkResponse”方法以再次将响应转换为 JSONArray,因为 JsonArrayRequest 的 ResponseListner 需要一种 JSONArray
String URL = "www.myposturl.com/data";
RequestQueue queue = Volley.newRequestQueue(this);
//Create json array for filter
JSONArray array = new JSONArray();
//Create json objects for two filter Ids
JSONObject jsonParam = new JSONObject();
JSONObject jsonParam1 = new JSONObject();
try {
//Add string params
jsonParam.put("NAME", "XXXXXXXXXXXXXX");
jsonParam.put("USERNAME", "XXXXXXXXXXXXXX");
jsonParam.put("PASSWORD", "XXXXXXXXXXXX");
jsonParam1.put("NAME", "XXXXXXXXXXXXXX");
jsonParam1.put("USERNAME", "XXXXXXXXXXXXXX");
jsonParam1.put("PASSWORD", "XXXXXXXXXXXX");
} catch (JSONException e) {
e.printStackTrace();
}
array.put(jsonParam);
array.put(jsonParam1);
JsonArrayRequest request_json = new JsonArrayRequest(Request.Method.POST, URL, array,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Get Final response
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
VolleyLog.e("Error: ", volleyError.getMessage());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
// Add headers
return headers;
}
//Important part to convert response to JSON Array Again
@Override
protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
String responseString;
JSONArray array = new JSONArray();
if (response != null) {
try {
responseString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
JSONObject obj = new JSONObject(responseString);
(array).put(obj);
} catch (Exception ex) {
}
}
//return array;
return Response.success(array, HttpHeaderParser.parseCacheHeaders(response));
}
};
queue.add(request_json);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19478 次 |
| 最近记录: |