2016-11-10 6 views
3

Ich habe OkHttpClient eingerichtet und die GET-Anfrage erfolgreich an den Server gesendet. Und ich könnte auch die POST-Anfrage an den Server mit leerer Body-Tag senden.JSON-Nachrichtentext über POST-Anfrage in OKhttp in Android senden

Jetzt versuche ich, das folgende JSON-Objekt an den Server zu senden.

{ 
"title": "Mr.", 
"first_name":"Nifras", 
"last_name": "", 
"email": "[email protected]", 
"contact_number": "75832366", 
"billing_address": "", 
"connected_via":"Application" 
} 

Dafür ich die OkHttpClient Bibliothek Klasse zum Hinzufügen RequestBody habe versucht, aber ich kann nicht das JSON-Objekt als Körper der HTTP-POST-Anfrage zu senden. Der folgende Weg habe ich versucht, den Körper aufzubauen und die Post-Anfrage zu bearbeiten.

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

Wie schicke ich das JSON-Objekt über eine POST-Anfrage an den Server.

Vielen Dank im Voraus.

+1

Sie könnten einfach verwenden sehr beliebt Retrofit-Bibliothek für das hängt. Sie müssen nur eine POJO-Klasse mit Feldern erstellen, die die JSON-Felder darstellen, und sie als Body der Anfrage senden. –

Antwort

3

Versuchen Sie, diese

hinzufügen Gradle 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; 
    } 

Parse Antwort

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; 
} 
+0

Danke Kumpel. Es ist Arbeit. :) +1 – nifCody

+0

Froh, dass es geholfen hat :) – young

1

Genau dies tun:

@Override 
public void writeTo(BufferedSink sink) throws IOException { 
    sink.writeUtf8(yourJsonString); 
} 

Und es sollte in Ordnung :-) funktionieren, wenn ich die Dokumentation richtig zu verstehen, ist sink ein Behälter, in dem Sie die Daten schreiben können Sie zu stellen. Die writeUtf8 Methode ist Bequemlichkeit für die String in Bytes, die UTF-8-Codierung verwenden.

Verwandte Themen