使用android volley库发送JSONArray POST请求

我想发送和接收带有齐射的Jsonarrays。 现在我可以收到一个数组,但没关系,但我不知道如何发送请求(例如:使用post方法)。

JsonArrayRequest arrayReq = new JsonArrayRequest(URL, new Listener() { } 

  List> listMap = new ArrayList>(); Map map = new HashMap(); try { map.put("email", customer.getEmail()); map.put("password",customer.getPassword()); } catch (Exception e) { e.printStackTrace(); } listMap.add(map); String url = PersonalConstants.BASE_URL+"/url"; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( Request.Method.POST, url, String.valueOf(new JSONArray(listMap)), new Response.Listener() { @Override public void onResponse(JSONObject jsonObject) { Log.d(App.TAG, jsonObject.toString()); } }, new Response.ErrorListener (){ @Override public void onErrorResponse(VolleyError volleyError) { Log.d(App.TAG,volleyError.toString()); } } ); App.getInstance().getmRequestQueue().add(jsonObjectRequest); 

这是一个例子:

 // 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 PROJECTlibs文件夹中删除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);