2016-09-09 9 views
0

나는 아래의 예제가 OKHttp과 함께 HTTP POST 메시지를 보내고 있음을 발견했다.본문을 OKHttp 메시지에 전달하는 방법은 무엇입니까?

본문 문자열을 RequestBody으로 전달하는 방법을 모르겠다. 왜 두 가지 논쟁이 필요합니까?

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 왜 당신이 요구하는 경우() 이러한 키 - 값 쌍이기 때문에 그것의, 두 개의 인수를 취합니다. 첫 번째 매개 변수는 이름이고 두 번째 매개 변수는 값입니다. 난 그냥 JSON을 보낼

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

:

어쨌든 나는 this 예를 들어 문자열을 게시하는 방법을 명확 방법을 보여줍니다 생각합니다. 어떤'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 \ ", [], []]"); ' –

관련 문제