当前位置: 首页 > 面试题库 >

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

罗均
2023-03-14
问题内容

我是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",
},

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


问题答案:

当使用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;
          }
      }
);


 类似资料:
  • 这个问题看起来可能是重复的(不是),但我被这个JSONException错误所困扰: 类型为 java.lang.String 的值 die 无法转换为 JSON 数组。 我正在使用< code >凌空的< code>JsonArrayRequest从服务器获取jsonarray。我的< code>JsonArrayRequest抛出了上面的错误,因为我想< code>post一个字符串到服务器并

  • 我正在使用截击库。我有以下API urlhttp://example.com/project/contriller/并且需要将json请求作为body发布到它。 如何使用截击发送?

  • 问题内容: 我需要使用JSONObject发出请求,如下所示: 预期的响应是JSONArray。使用Volley,我无法使用JSONObject参数创建JsonArrayRequest。 在以这种方式发出请求之前: 但是现在是JSONObject包含JSONObject。 现在如何使用Volley发出此请求? 问题答案: 我创建了一个自定义齐射请求,该请求接受JSONObject作为参数。 Cus

  • 我正在使用截击与API交互。我需要向返回JSON数组的服务发送post请求(带参数)。 JsonObjectRequest有一个构造函数,它接受一个方法和一组参数 但是JSONArrayRequest(我需要的一个)只有一个构造函数的形式 我如何才能使其发送包含数据的POST请求?

  • 问题内容: 我正在尝试从HTML中读取发布请求参数。我可以使用JavaScript中的以下代码读取get请求参数。 但这不适用于发布请求。谁能告诉我如何使用JavaScript读取HTML中的发布请求参数值? 问题答案: POST数据是在服务器端处理的数据 。Javascript位于客户端。因此,您无法使用JavaScript读取帖子数据。

  • 我正在使用Android截击来发出请求。所以我使用这个代码。我不明白一件事。我在服务器中检查params是否始终为null。我认为GETPARAMS()不工作。我应该做些什么来解决这个问题。