2016-09-09 1 views
0

私はOKHttpでHTTP POSTメッセージを送信するこの下の例を見つけました。本文をOKHttpメッセージに渡すには?

体の文字列をRequestBodyに渡す方法がわかりません。なぜ2つの議論が必要ですか?

RequestBody formBody = new FormBody.Builder() 
       .add("message", "Your message") 
       .build(); 
     Request request = new Request.Builder() 
       .url("http://rhcloud.com") 
       .post(formBody).addHeader("operation", "modifyRecords") 
       .build(); 

     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 

      client.newCall(request).enqueue(new Callback() { 
       @Override 
       public void onFailure(Call call, IOException e) { 
        e.printStackTrace(); 
       } 

       @Override 
       public void onResponse(Call call, Response response) throws IOException { 
        try (ResponseBody responseBody = response.body()) { 
         if (!response.isSuccessful()) 
          throw new IOException("Unexpected code " + response); 

         Headers responseHeaders = response.headers(); 
         for (int i = 0, size = responseHeaders.size(); i < size; i++) { 
          System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i)); 
         } 

         System.out.println(responseBody.string()); 
        } 
       } 
      }); 
     } 
    } 

答えて

1

(私はあなたが全く正しい意味を理解すればわからないんだけど、FormBodyは.add、なぜあなたが求めている場合)は、これらのキーと値のペアであるため、それはだ、二つの引数を取ります。最初のパラメータは名前であり、2番目の値は値です。

とにかく私はthis例は、文字列を投稿する方法を明確にする方法を示し思う:

public static final MediaType MEDIA_TYPE_MARKDOWN 
     = MediaType.parse("text/x-markdown; charset=utf-8"); 

    private final OkHttpClient client = new OkHttpClient(); 

    public void run() throws Exception { 
    String postBody = "" 
     + "Releases\n" 
     + "--------\n" 
     + "\n" 
     + " * _1.0_ May 6, 2013\n" 
     + " * _1.1_ June 15, 2013\n" 
     + " * _1.2_ August 11, 2013\n"; 

    Request request = new Request.Builder() 
     .url("https://api.github.com/markdown/raw") 
     .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody)) 
     .build(); 

    Response response = client.newCall(request).execute(); 
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); 

    System.out.println(response.body().string()); 
    } 
+0

私はJSONを送りたいです。どのような 'MediaType'を設定する必要がありますか? –

+1

私はこれを考えています:http://stackoverflow.com/questions/34179922/okhttp-post-body-as-jsonこの投稿の作者は解決策を追加しました。私はOkHttpでしばらく働いていません。 とにかくMediaTypeはapplication/jsonでなければなりません – Brudus

+0

必要な行は次のとおりです: 'RequestBody formBody = RequestBody.create(MediaType.parse(" application/json ")、" [\ "MB \"、[]、[]] " ); ' –

関連する問題