J'ai configuré OkHttpClient et envoyé avec succès la requête GET au serveur. Et aussi je pouvais pouvoir envoyer la demande POST au serveur avec la balise body vide.
Maintenant, j'essaie d'envoyer l'objet JSON suivant au serveur.
{
"title": "Mr.",
"first_name":"Nifras",
"last_name": "",
"email": "[email protected]",
"contact_number": "75832366",
"billing_address": "",
"connected_via":"Application"
}
Pour cela, j’essaie d’ajouter la classe RequestBody
de la bibliothèque OkHttpClient, mais je ne parviens pas à envoyer l’objet JSON en tant que corps de la requête http POST. De la manière suivante, j'ai essayé de créer le corps et de traiter la demande de publication.
OkHttpClient client = new OkHttpClient();
RequestBody body = new RequestBody() {
@Override
public MediaType contentType() {
return ApplicationContants.JSON;
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
// This is the place to add json I thought. But How could i do this
}
};
Request request = new Request.Builder()
.url(ApplicationContants.BASE_URL + ApplicationContants.CUSTOMER_URL)
.post(body)
.build();
Comment envoyer l'objet JSON au serveur via la demande POST.
Merci d'avance.
Essaye ça
Ajouter Gradle dépend compile 'com.squareup.okhttp3:okhttp:3.2.0'
public static JSONObject foo(String url, JSONObject json) {
JSONObject jsonObjectResp = null;
try {
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
okhttp3.RequestBody body = RequestBody.create(JSON, json.toString());
okhttp3.Request request = new okhttp3.Request.Builder()
.url(url)
.post(body)
.build();
okhttp3.Response response = client.newCall(request).execute();
String networkResp = response.body().string();
if (!networkResp.isEmpty()) {
jsonObjectResp = parseJSONStringToJSONObject(networkResp);
}
} catch (Exception ex) {
String err = String.format("{\"result\":\"false\",\"error\":\"%s\"}", ex.getMessage());
jsonObjectResp = parseJSONStringToJSONObject(err);
}
return jsonObjectResp;
}
Réponse d'analyse
private static JSONObject parseJSONStringToJSONObject(final String strr) {
JSONObject response = null;
try {
response = new JSONObject(strr);
} catch (Exception ex) {
// Log.e("Could not parse malformed JSON: \"" + json + "\"");
try {
response = new JSONObject();
response.put("result", "failed");
response.put("data", strr);
response.put("error", ex.getMessage());
} catch (Exception exx) {
}
}
return response;
}
Faites juste ceci:
@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.writeUtf8(yourJsonString);
}
Et cela devrait fonctionner correctement :-) Si je comprends bien la documentation, sink
est un conteneur dans lequel vous pouvez écrire les données que vous souhaitez publier. La méthode writeUtf8
est pratique pour transformer la String
en octets, en utilisant le codage UTF-8.