How to post request parameters when using JsonArrayRequest in Volley

后端 未结 5 1496
暗喜
暗喜 2020-12-06 22:03

I am newbie to Json parsing. I am trying to read a json data using JsonArrayRequest but I am little confused in sending parameters and use POST method.In case o

相关标签:
5条回答
  • 2020-12-06 22:24

    If you are using 'com.android.volley:volley:1.0.0' you should override getParams() method like this:

    public synchronized void addJsonArrayRequest(int method, String url, final JSONObject jsonRequest, Response.Listener<JSONArray> responseListener, Response.ErrorListener errorListener) {
        JsonArrayRequest request = new JsonArrayRequest(method, url, null, responseListener, errorListener) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String, String> params = new HashMap<>();
                try {
                    params.put("key1", jsonRequest.getString("key1"));
                    params.put("key2", Integer.toString(jsonRequest.getInt("key2")));
                    params.put("key3", Boolean.toString(jsonRequest.getBoolean("key3")));
                    params.put("key4", jsonRequest.getJSONArray("key4").toString());
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return params;
            }
        };
        addToRequestQueue(request);
    }
    

    If you are using 'com.mcxiaoke.volley:library:1.0.19' you can simply put JSONObject:

    public synchronized void addJsonArrayRequest(int method, String url, JSONObject jsonRequest, Response.Listener<JSONArray> responseListener, Response.ErrorListener errorListener) {
        JsonArrayRequest request = new JsonArrayRequest(method, url, jsonRequest, responseListener, errorListener);
        addToRequestQueue(request);
    }
    
    0 讨论(0)
  • 2020-12-06 22:27

    Here you go..

    final HashMap<String, String> params = new HashMap<String, String>();
        params.put("email", userName);
        params.put("password", password);
    
        final JSONObject jsonObject = new JSONObject(params);
    
        JsonArrayRequest req = new JsonArrayRequest(Request.Method.POST, url, jsonObject,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {
    //process response
    }
    catch(JSONEXception e){}
    

    And on PHP side you can get these params like this

    $json=file_get_contents('php://input');
    
    $data = json_decode($json);
    $email=$data->{'email'};
    $pass=$data->{'password'};
    
    0 讨论(0)
  • 2020-12-06 22:35
    import java.io.UnsupportedEncodingException;
    import java.util.Map;    
    import org.json.JSONException;
    import org.json.JSONObject;    
    import com.android.volley.NetworkResponse;
    import com.android.volley.ParseError;
    import com.android.volley.Request;
    import com.android.volley.Response;
    import com.android.volley.Response.ErrorListener;
    import com.android.volley.Response.Listener;
    import com.android.volley.toolbox.HttpHeaderParser;
    
    public class CustomRequest extends Request<JSONObject> {
    
        private Listener<JSONObject> listener;
        private Map<String, String> params;
    
        public CustomRequest(String url, Map<String, String> params,
                Listener<JSONObject> reponseListener, ErrorListener errorListener) {
            super(Method.GET, url, errorListener);
            this.listener = reponseListener;
            this.params = params;
        }
    
        public CustomRequest(int method, String url, Map<String, String> params,
                Listener<JSONObject> reponseListener, ErrorListener errorListener) {
            super(method, url, errorListener);
            this.listener = reponseListener;
            this.params = params;
        }
    
        protected Map<String, String> getParams()
                throws com.android.volley.AuthFailureError {
            return params;
        };
    
        @Override
        protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
            try {
                String jsonString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers));
                return Response.success(new JSONObject(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(JSONObject response) {
            // TODO Auto-generated method stub
            listener.onResponse(response);
        }
    }
    

    In activity/fragment do use this

    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    CustomRequest jsObjRequest = new CustomRequest(Method.POST, url, params, this.createRequestSuccessListener(), this.createRequestErrorListener());
    
    requestQueue.add(jsObjRequest);
    

    Answer get form here. https://stackoverflow.com/a/19945676/1641556

    Refer these articles also.

    1. https://developer.android.com/training/volley/index.html
    2. http://www.androidhive.info/2014/09/android-json-parsing-using-volley/
    0 讨论(0)
  • 2020-12-06 22:40

    This solved my problem to pass params when JsonArrayRequest and POST method is used.

    Volley.newRequestQueue(getActivity())
        .add(new JsonRequest<JSONArray>(Request.Method.POST,
        MySingleton.getInstance().getDOWNLOAD_SERVICES_URL(),
        jsonobj.toString(),
        new Response.Listener<JSONArray>() {
              @Override
              public void onResponse(JSONArray jsonArray) {
                  Log.d("response", "res-rec is" + jsonArray);
                  if (jsonArray == null) {
                      pDialog.dismiss();
                      Snackbar.make(myview, "No services found", Snackbar.LENGTH_LONG).show();
    
                  } else {
    
    
                      for (int i = 0; i < jsonArray.length(); i++) {
                          try {
    
                              pDialog.dismiss();
                              JSONObject jsonObject = jsonArray.getJSONObject(i);
                              String desc = jsonObject.getString("SvcTypeDsc");
                              String image_url = jsonObject.getString("ThumbnailUrl");
                              // al_ImageUrls.add(image_url);
    
                              al_list_of_services.add(desc);
                              ad_servicesadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, al_list_of_services);
    
                              lv_webservicesList.setAdapter(ad_servicesadapter);
    
                              Log.d("imageurls", "imagesurl " + image_url);
                              Log.d("services-list", "list is " + desc + " " + i);
                          } catch (JSONException e) {
                              e.printStackTrace();
                          }
    
                      }
                  }
              }
          }, new Response.ErrorListener() {
              @Override
              public void onErrorResponse(VolleyError volleyError) {
                  VolleyLog.d("Login request", "Error: " + volleyError.getMessage());
                  Log.d("Volley Error:", "Volley Error:" + volleyError.getMessage());
                  Toast.makeText(getActivity(), "Unable to connect to server, try again later", Toast.LENGTH_LONG).show();
                  pDialog.dismiss();
              }
          })
    
          {
              @Override
              protected Map<String, String> getParams() throws AuthFailureError {
    
    
                  Map<String, String> params = new HashMap<String, String>();
                  // params.put("uniquesessiontokenid", "39676161-b890-4d10-8c96-7aa3d9724119");
                  params.put("uniquesessiontokenid", userDet.getSessionToken());
                  params.put("said", userDet.getSAID());
                  params.put("SOId", "23295");
    
                  return super.getParams();
              }
    
              @Override
              protected Response<JSONArray> parseNetworkResponse(NetworkResponse networkResponse) {
    
    
                  try {
                      String jsonString = new String(networkResponse.data,
                              HttpHeaderParser
                                      .parseCharset(networkResponse.headers));
                      return Response.success(new JSONArray(jsonString),
                              HttpHeaderParser
                                      .parseCacheHeaders(networkResponse));
                  } catch (UnsupportedEncodingException e) {
                      return Response.error(new ParseError(e));
                  } catch (JSONException je) {
                      return Response.error(new ParseError(je));
                  }
    
                  //  return null;
              }
          }
    );
    
    0 讨论(0)
  • 2020-12-06 22:43

    here is an example to post the request to the server using volly

    You can add the parameters to a HashMap and then pass that into the request you are creating;

    EDITED:

        HashMap<String, String> mRequestParams = new HashMap<String, String>();
        mRequestParams.put("username","abcd");
        mRequestParams.put("password", "123456");
    
        public void vollyStringRequestForPost() {
    
    
       JsonArrayRequest req = new JsonArrayRequest(Request.Method.POST, strURL, new JSONObject(mRequestParams),
                    new Response.Listener<JSONArray>() {
    
                        @Override
                        public void onResponse(JSONArray response) {
    
                                try {
    
                                   //Here you will receive your response
    
                                } catch (JSONException e) {
    
                                    e.printStackTrace();
    
                                }
                            }
                        }, new Response.ErrorListener() {
    
                    @Override
                    public void onErrorResponse(VolleyError error) {
    
                        //Do what you want to do on error
                    }
                });
    
    
    
            mRequestQueue.add(req);
        }
    
    
    }
    
    0 讨论(0)
提交回复
热议问题