一尘不染

在Volley中使用JsonArrayRequest时如何发布请求参数

json

我是Json解析的新手。我正在尝试使用读取json数据,JsonArrayRequest但是在发送参数和使用POST方法时我有点困惑。在JsonObjectRequest我可以发送方法类型,URL,参数的情况下,但是在JsonArrayRequest如何发送诸如用户名和密码之类的参数时,我使用POST方法。请帮帮我。这是我编写的代码。

final JsonArrayRequest jsonObjReq = new JsonArrayRequest(MySingleton.getInstance().getDOWNLOAD_SERVICES_URL(), new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
        try {
            if(response==null) {
                pDialog.hide();
            }
            for (int i = 0; i < response.length(); i++) {
                jresponse = response.getJSONObject(i);
            }
            //String service_response = response.getString("SvcTypeDsc");
            Toast.makeText(getActivity().getApplicationContext(), "services" + jresponse, Toast.LENGTH_SHORT).show();
        } catch (JSONException e) {
            e.printStackTrace();
            Log.d("soservices", "sos" + e.getMessage());
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        VolleyLog.d("Login request", "Error: " + error.getMessage());
        Log.d("Volley Error:", "Volley Error:" + error.getMessage());
        Toast.makeText(getActivity(), "Unable to connect to server, try again later", Toast.LENGTH_LONG).show();
        pDialog.hide();
    }
}) {
    @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("loginname", userDet.getSAID());
        params.put("password", "23295");
        return super.getParams();
     }

     @Override
     public int getMethod() {
         try {
             getParams();
         } catch (AuthFailureError authFailureError) {
             authFailureError.printStackTrace();
         }
             return super.getMethod();
         }
     };

     AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

}

我的json数据就像:

{
    "username":"rushi",
    "firstname": "abc",
},
{
    "username": "xyz",
    "firstname": "vxa",
},

参数未发送。请帮我解决这个问题。先感谢您。


阅读 232

收藏
2020-07-27

共1个答案

一尘不染

当使用JsonArrayRequest和POST方法时,这解决了我传递参数的问题。

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;
          }
      }
);
2020-07-27