2016-06-12 2 views
1

Android 애플리케이션에서 네트워크 작동을 위해 Google의 발리를 사용하고 있습니다. 요청을해야하지만 본문을 양식 데이터로 보낼 필요가있는 경우가 있습니다. 다른 모든 것을 시도했지만 양식 데이터로 요청할 수 없습니다. 여기Android : 본문 데이터를 본문으로 보내기 Google Volley

는 컬 내가 발리에서 그 -F 부분을 달성 할 수있는 방법

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

입니까? 서버가 잘못된 요청을 던지고 있습니다.

이것은 내가 무엇을했는지 있습니다 :

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 ye를 읽었습니까? 티? – 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"; –

관련 문제