2016-06-12 49 views
1

在我的Android應用程序中,我正在使用谷歌的排球進行網絡操作。有一種情況我需要提出請求,但將身體作爲表單數據發送。 我已經嘗試了其他一切,但我無法將請求作爲表單數據。Android:將身份數據發送爲身體Google Volley

這裏是捲曲

curl -X POST -H "Content-Type: multipart/form-data" -F "mobile_number=<XXXX>" "<server_url>" 

我怎樣才能實現凌空-F一部分?服務器正在拋出不好的請求。

這是我做了什麼:

final JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, URLFactory.OTP_URL, 
       null, listener, errorListener){ 

      @Override 
      public byte[] getBody() { 
       final JSONObject jsonObject = new JSONObject(); 
       try { 
        jsonObject.put("mobile_number", mobileNumber); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        return null; 
       } 
       return jsonObject.toString().getBytes(); 
      } 


      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       final HashMap<String, String> headers = new HashMap<>(); 
       headers.put("Content-Type", "multipart/form-data"); 
       return headers; 
      } 
     }; 

請幫我在這。

+0

你看過http://stackoverflow.com/questions/32240177/working-post-multipart-request-with-volley-and-without-httpentity?lq=1你們T' – BNK

回答

1

這可以通過自己創建postBody來排除。請參考下面的代碼。

代碼產生身體:

private String createPostBody(Map<String, String> params) { 
     StringBuilder sbPost = new StringBuilder(); 
     for (String key : params.keySet()) { 
       if (params.get(key) != null) { 
        sbPost.append("\r\n" + "--" + BOUNDARY + "\r\n"); 
        sbPost.append("Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n\r\n"); 
        sbPost.append(params.get(key)); 
       } 
      } 

     return sbPost.toString(); 
    } 

體改getBody()代碼:

@Override 
      public byte[] getBody() { 
       Map<String,String> params = new HashMap<>(); 
       params.add("mobile_number", mobileNumber); 
       String postBody = createPostBody(params); 

       return postBody.getBytes(); 
      } 

您將需要修改getHeaders也告訴服務器你邊界是什麼:

@Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       final HashMap<String, String> headers = new HashMap<>(); 
       headers.put("Content-Type", "multipart/form-data;boundary=" + BOUNDARY;); 
       return headers; 
      } 
+0

什麼是邊界? sbPost.append(「\ r \ n」+「 - 」+ BOUNDARY +「\ r \ n」); – Kaustubh

+0

這是服務器用於拆分郵件正文中收到的不同參數的字符串。你可以參考下面的鏈接:http://stackoverflow.com/questions/3508338/what-is-the-boundary-in-multipart-form-data –

+0

我也添加了getHeader()函數。您可以將任何字符串定義爲邊界。例如。 private static final String BOUNDARY =「s2retfgsGSRFsERFGHfg」; –