Meine Anforderung ist, PUT
zu verwenden, einen Header und einen Body an den Server zu senden, der etwas in der Datenbank aktualisiert.
Ich habe gerade okHttp documentation gelesen und ich habe versucht, ihr Beispiel für POST
zu verwenden, aber es funktioniert nicht für meinen Anwendungsfall (Ich glaube, es liegt daran, dass der Server die Verwendung von PUT
anstelle von POST
erfordert.) .
Dies ist meine Methode mit POST
:
public void postRequestWithHeaderAndBody(String url, String header, String jsonBody) {
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, jsonBody);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.post(body)
.addHeader("Authorization", header)
.build();
makeCall(client, request);
}
Ich habe versucht, mit PUT
nach okHttp-Beispielen zu suchen, ohne Erfolg. Wenn ich PUT
method verwenden muss, gibt es trotzdem die Möglichkeit, okHttp zu verwenden?
Ich benutze okhttp: 2.4.0 (nur für den Fall), danke für jede Hilfe!
Ändern Sie Ihren .post
mit .put
public void putRequestWithHeaderAndBody(String url, String header, String jsonBody) {
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, jsonBody);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.put(body) //PUT
.addHeader("Authorization", header)
.build();
makeCall(client, request);
}
Wenn Sie OkHttp Version 2.x verwenden, verwenden Sie Folgendes:
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormEncodingBuilder()
.add("Key", "Value")
.build();
Request request = new Request.Builder()
.url("http://www.foo.bar/index.php")
.put(formBody) // Use PUT on this line.
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new IOException("Unexpected response code: " + response);
}
System.out.println(response.body().string());
Da OkHttp Version 3 FormEncodingBuilder
durch FormBody
und FormBody.Builder()
ersetzt hat, müssen Sie für Version 3.x Folgendes tun:
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
.add("message", "Your message")
.build();
Request request = new Request.Builder()
.url("http://www.foo.bar/index.php")
.put(formBody) // PUT here.
.build();
try {
Response response = client.newCall(request).execute();
// Do something with the response.
} catch (IOException e) {
e.printStackTrace();
}