【问题标题】:Put ArrayList into param JsonObject将 ArrayList 放入参数 JsonObject
【发布时间】:2015-06-29 00:59:48
【问题描述】:

我必须使用 Volley Framework 进行请求。这是一个带有 JSONObject 的 POST 请求。

我必须传递一个字符串和一个 JSONArray..但是我怎么能呢?

我从这个开始:

 private String mUrl;
    private ArrayList<String> mUrlDove;

  HashMap<String, String> params = new HashMap<String, String>();
            params.put("url", mUrl);
            params.put("urlDove", mUrlDove); ---> Wrong because mUrlDove is not a String


            mUrl = app.getInstance().getmUrlRestWS() + getString(R.string.path);

            JsonObjectRequest mRequest = new JsonObjectRequest(
                    mUrl, new JSONObject(params),
                    createMyReqSuccessListener(),
                    createMyReqErrorListener()) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return app.getInstance().createBasicAuthHeader();
                }
            };

如果我尝试使用浏览器,我必须设置这个:

{
  "url": "www.secret.com",
  "urlDove" : [ "www.google.com","www.yahoo.com"]
}

【问题讨论】:

    标签: java android android-volley


    【解决方案1】:

    尝试传递 JSONObject 而不是 hashmap

    JSONObject params = new JSONObject();
    params.put("url", "www.secret.com");
    
    JSONArray urlDove = new JSONArray();
    urlDove.put("www.google.com");
    urlDove.put("www.yahoo.com");
    
    params.put("urlDove", urlDove);
    
    
    JsonObjectRequest mRequest = new JsonObjectRequest(
                    mUrl, params,
                    createMyReqSuccessListener(),
                    createMyReqErrorListener()) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return app.getInstance().createBasicAuthHeader();
                }
            };
    

    解析json时参考https://stackoverflow.com/a/17810270/4810752

    【讨论】:

      【解决方案2】:

      你需要先创建一个 JSON 数组然后存储它

      private String mUrl;
      private ArrayList<String> mUrlDove;
      
      HashMap<String, String> params = new HashMap<String, String>();
              params.put("url", mUrl);
              JSONArray jsArray = new JSONArray(mUrlDove);
              params.put("urlDove", jsArray.toString()); 
      
              mUrl = app.getInstance().getmUrlRestWS() + getString(R.string.path);
      
              JsonObjectRequest mRequest = new JsonObjectRequest(
                      mUrl, new JSONObject(params),
                      createMyReqSuccessListener(),
                      createMyReqErrorListener()) {
                  @Override
                  public Map<String, String> getHeaders() throws AuthFailureError {
                      return app.getInstance().createBasicAuthHeader();
                  }
              };
      

      【讨论】:

      【解决方案3】:

      JSONObject 可以接受 Java 对象,尝试使用

      Map<String,Object> 
      

      类似这样的:

          String mUrl;  //initialized somewhere else
          ArrayList<String> mUrlDove;  //initialized somewhere else
      
          Map<String, Object> jsonParams = new HashMap<>();
          jsonParams.put("url", mUrl);
          jsonParams.put("urlDove", mUrlDove);
      
          JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(jsonParams),
                  new Response.Listener<JSONObject>()
                  {
                      @Override
                      public void onResponse(JSONObject response)
                      {
                          Log.d("Volley Response: ", response.toString()); 
                          //do the other stuff you need...
                      }
                  },
                  new Response.ErrorListener()
                  {
                      @Override
                      public void onErrorResponse(VolleyError error)
                      {
                          if (null != error.networkResponse)
                          {
                              Log.d(" Volley Error Code: ", "" + error.networkResponse.statusCode);
                             //probably throw an Exception or some MessageEvent
                          }
                      }
                  });
      
          requestQueue.add(request);
      

      这适用于像

      这样的复杂对象
       Map<String,<List<Map<String,Object>>>
      

      最内部的对象是字符串和整数,而 List 被初始化为一个新的 ArrayList。

      希望对您有所帮助!

      【讨论】:

      猜你喜欢
      • 2013-10-23
      • 2020-01-23
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2013-01-12
      • 2012-09-22
      • 2018-03-16
      相关资源
      最近更新 更多