使用android volley库发送JSONArray POST请求
我想发送和接收带有齐射的Jsonarrays。 现在我可以收到一个数组,但没关系,但我不知道如何发送请求(例如:使用post方法)。
JsonArrayRequest arrayReq = new JsonArrayRequest(URL, new Listener() { }
List
这是一个例子:
// Define the web service URL final String URL = "http://www.someurl.com"; // POST params to be sent to the server HashMap params = new HashMap(); params.put("name", "raha tamjid"); // Define the POST request JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params), new Response.Listener() { @Override public void onResponse(JSONObject response) { try { VolleyLog.v("Response:%n %s", response.toString(4)); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.e("Error: ", error.getMessage()); } }); // Add the request object to the queue to be executed ApplicationController.getInstance().addToRequestQueue(req);
POST请求的不同之处在于它将JSONObject
作为参数。
编辑1:
如果您在IDE中将Volley
安装为库项目,则只需定义一个新的构造函数
public JsonArrayRequest(int method, String url, JSONObject jsonRequest, Listener listener, ErrorListener errorListener) { super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, errorListener); }
在类JsonArrayRequest
,它存在于Volley
库代码中。 现在,您可以使用它来创建JsonArrayRequest
对象并将它们添加到RequestQueue
。
编辑2:
1.从这里获取Volley图书馆项目。 下载项目并在IDE中进行设置。
2.如编辑1中所述,对JsonRequest
类(在com.android.volley.toolbox
命名空间中找到)进行修改 。
3.从APPLICATION PROJECT的libs
文件夹中删除volley.jar
。
4.现在转到Project Properties – > Android – > Library并单击Add 。 从这里选择Volley
项目。 清洁和重建。
5.现在在您的APPLICATION PROJECT中,您可以创建POST JsonArrayRequest
,就像我们如何制作POST JsonObjectRequest
并在Response
获取JSONArray
。
创建一个类并扩展JsonArrayRequest然后覆盖
@Override protected Map getParams() throws AuthFailureError { HashMap params = new HashMap(); params.put("name", "value"); return params; } and add a new constructor and in it call super(Method.POST, url, null, listener, errorListener); or use this class public class PostJsonArrayRequest extends JsonRequest { /** * Creates a new request. * @param url URL to fetch the JSON from * @param listener Listener to receive the JSON response * @param errorListener Error listener, or null to ignore errors. */ public PostJsonArrayRequest(String url, Response.Listener listener, Response.ErrorListener errorListener) { super(Method.POST, url, null, listener, errorListener); } @Override protected Map getParams() throws AuthFailureError { HashMap params = new HashMap(); params.put("name", "value"); return params; } @Override protected Response parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(new JSONArray(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } }
现在创建一个名为JsonArrayPostRequest的新java类,你可以像上一个请求一样使用它,只需用JsonArrayPostRequest替换JSONArrayRequest并传递正确的参数
public class JsonArrayPostRequest extends Request{ private Map mParam; private Listener mListener; public JsonArrayPostRequest(String url,Listener listener, ErrorListener errorListener,Map param) { super(Request.Method.POST, url, errorListener); mListener=listener; mParam=param; } @Override protected Map getParams() throws AuthFailureError { return mParam; } @Override protected Response parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(new JSONArray(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } @Override protected void deliverResponse(JSONArray response) { mListener.onResponse(response); } }
使用:
JsonArrayPostRequest request = new JsonArrayPostRequest(URL,new Response.Listener(), new Response.ErrorListener() ,params);