2016-09-09 2 views
0

Ich habe dieses Beispiel unten gefunden, um HTTP POST Nachricht mit OKHttp zu senden.Wie Körper zu OKHttp Nachricht übergeben?

Ich verstehe nicht, wie man eine Zeichenfolge an RequestBody übergeben. Warum braucht es zwei Argumente?

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()); 
        } 
       } 
      }); 
     } 
    } 

Antwort

1

Ich bin mir nicht sicher, ob ich verstehe, was Sie ganz richtig bedeuten, aber wenn Sie fragen, warum die FormBody .ADD() nimmt zwei Argumente, es ist, weil diese Key-Value-Paare sind. Der erste Parameter ist der Name und der zweite der Wert.

Auf jeden Fall denke ich this Beispiel ein klarer Weg zeigt, wie eine Zeichenfolge schreiben:

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

Ich möchte nur eine JSON senden. Was 'MediaType' muss ich einstellen? –

+1

Ich denke das: http://stackoverflow.com/questions/34179922/okhttp-post-body-as-json könnte hilfreich sein. Der Autor dieses Beitrags hat eine Lösung hinzugefügt. Ich habe eine Weile nicht mit OkHttp gearbeitet. Anyway MediaType muss application/json sein – Brudus

+0

Die richtige Linie, die ich brauche, ist: 'RequestBody formBody = RequestBody.create (MediaType.parse (" application/json ")," [\ "MB \", [], []] "); ' –

Verwandte Themen