2016-06-12 5 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を読んでいますか? 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(); 
    } 

Modifed 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()関数も追加しました。任意の文字列を境界として定義できます。たとえば。プライベートstatic final String BOUNDARY = "s2retfgsGSRFsERFGHfg"; –

関連する問題