带有标题和正文的Android Volley POST请求

时间:2017-09-14 22:46:39

标签: android post android-volley

我的代码正在尝试将数据发布到服务器,我需要添加标题,我正在使用Volley库。

如果我不包含“getparams”方法,请求有效,我可以发布但没有数据。

如果我包含“getparams”方法,请求将失败并返回400(错误请求)。

我无法找出错误的位置。

Convert

4 个答案:

答案 0 :(得分:3)

对于身份验证,您应该在 getHeaders 中包含该信息,而不是 getParams

将getParams和添加移除到您的getHeaders

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
       Map<String, String> headers = new HashMap<>();                
       String credentials = "username:password";
       String auth = "Basic "
                        + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
       headers.put("Accept", "application/json");
       headers.put("Content-Type", "application/json");
       headers.put("Authorization", auth);
       return headers;
}

希望有所帮助

答案 1 :(得分:0)

我没有多少使用截击,但我有一个替代方案可以轻松完成你的工作。如果你想使用AsyncHTTPClient尝试这个。

public void tryPost(){
   AsynHTTPClient client = new AsyncHTTPClient();

   //to add the data which you wanna post 
   RequestParams params = new RequestParams();
   params.add("pass your value","from this value");
   params.put("list","your_list"); // this is for passing the arraylist

  client.post(url, params, new AsynchHTTPRespondHandeler(){
  // implement method to get the response from onSuccess()

  });
}

对于AsynchHTTPClient,请在您的gradle中执行此操作:

compile 'com.loopj.android:android-async-http:1.4.9'

您可以了解有关RequestParams的更多信息,以便传递不同的数据here

我希望你能用这个来做你的工作。请问我有任何问题。

答案 2 :(得分:0)

请检查此链接:

StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String s) {
        ///handle response from service
    }, new ErrorResponse() {
      @Override
      public void onErrorResponse(VolleyError volleyError) {
        //handle error response
      }
  }) {
      @Override
      protected Map<String, String> getParams() throws AuthFailureError {
          Map<String, String> params = new HashMap<String, String>();
          //add params <key,value>
          return params;
      }

      @Override
      public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String,String> headers = Constants.getHeaders(context);
        // add headers <key,value>
        String credentials = USERNAME+":"+PASSWORD;
        String auth = "Basic "
                + Base64.encodeToString(credentials.getBytes(),
                Base64.NO_WRAP);
        headers.put("Authorization", auth);
        return headers;
      }
  };
 mQueue.add(request);

https://gist.github.com/jchernandez/5bec1913af80e2923da8

答案 3 :(得分:0)

对于POST请求,对于 Header 部分,您必须覆盖 getHeaders()'function',对于请求的**负载/正文**可以提供 JsonObject 作为您“请求”的参数,也可以覆盖 getParams()“函数”

Kotlin程序员的邮政编码:

//创建Json有效负载

 skip_before_action :set_task, only: [:delete_all]

//将上面的有效负载传递给下面的请求 [然后无需重写'getParams()'方法]

val requestJsonPayloadMap = mutableMapOf<String, String>()
        requestJsonPayloadMap["param1"] = "param1Value"
        requestJsonPayloadMap["param2"] = "param2Value"

        // Creating JSON Object out of the Hash-map
        val requestJSONObject = JSONObject(requestJsonPayloadMap)