2017-09-20 1 views
0

Ich möchte Response Body verwenden, nachdem der Benutzer sich erfolgreich angemeldet hat, indem ich E-Mail und Passwort eingegeben habe. Ich habe versucht mit PufferReader, aber ich zeige NULL. HierJSON-Objekt nach Benutzer lesen Erfolgreich angemeldet

ist, was ich tue:

class PostData { 
private String response = "", data, userId, dataParsed; 
private int responseCode; 

String ServerData(String path, JSONObject params) { 
    try { 
     URL url = new URL(path); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     OutputStream outputStream = conn.getOutputStream(); 
     BufferedWriter bufferWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
     bufferWriter.write(String.valueOf(params)); //Sending email and Password 
     bufferWriter.flush(); 
     bufferWriter.close(); 
     outputStream.close(); 
     responseCode = conn.getResponseCode(); 
     System.out.print(responseCode); 

     if (responseCode == 200) { //now only when email and password are valid read response body 

      try { 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String responseBody; 

       StringBuffer response = new StringBuffer(); 
       while ((responseBody= bufferedReader.readLine()) != null) { 
        response.append(responseBody); 
       } 
       System.out.print("DATA CHECK: " + data); // it shows null here. 
       JSONObject root = new JSONObject(response.toString()); 
       JSONObject jsonObject = root.getJSONObject("data"); 
       for (int i = 0; i < jsonObject.length(); i++) { 
        JSONObject JO = (JSONObject) jsonObject.get(String.valueOf(i)); 
        userId = (String) JO.get("userId"); 
       } 
       dataParsed = dataParsed + userId; 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     outputStream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return response; 
} 
Integer passResCode() { 
    return responseCode; 
} 
String passUserId() { 
    return userId; 
} 
} 

hier ist das Beispiel meiner json Antworttext:

{"data": {"id": "xxxx","ttl": 1209600,"created": "2017-09-20T06:38:31.568Z","userId": 85},"requestStatus":true} 

Ich wollte nur userId aus dem Antworttext lesen. Ich arbeite an diesem von den letzten 2 Tagen, es wird große Hilfe sein, wenn jemand mir hilft :) danke.

+0

haben Sie versucht, Ihren Code debuggen? Erhalten Sie irgendetwas in 'bufferedReader.readLine()'? was ist 'daten' übrigens? –

+0

Daten enthalten den JSON-Antworttext. Ich habe versucht zu debuggen es zeigt null. – KhanStan99

+0

Versuchen Sie, das Protokoll in Ihrer while-Schleife zu drucken, um festzustellen, ob Daten vorhanden sind. –

Antwort

1

Versuchen Sie diesen Code

String responseBody; 
StringBuilder response = new StringBuilder(); 

while ((responseBody= bufferedReader.readLine()) != null) { 
    response.append(responseBody); 
} 
bufferedReader.close(); 

// Check if it is still null? 
System.out.println(response.toString()); 
+0

Hey nur zur Klarstellung, jetzt muss ich JSON-Daten von "Antwort" richtig analysieren? – KhanStan99

+0

create JsonObject mit response.toString() –

+0

hey, ich habe versucht, userId mit Json Object durch Übergabe von response.toString() zu analysieren. Aber es zeigt diesen Fehler im Log 'W/System.err: org.json.JSONException: Kein Wert für 0' – KhanStan99

1

zunächst Ihre Schleife mit

BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String line; 
StringBuffer response = new StringBuffer(); 
while ((line = rd.readLine()) != null) { 
     response.append(line); 
     response.append('\r'); 
} 
rd.close(); 

Es ist eine viel bessere Möglichkeit, Reaktions mit Gson in Java Object zu analysieren zu ersetzen. ist eine JSON-Parsing-Bibliothek. Eine Java-Serialisierungs-/Deserialisierungsbibliothek, die Java-Objekte in JSON und zurück konvertieren kann.

Um Gson in einem Gradle verwenden bauen, fügt

compile 'com.google.code.gson:gson:2.6.2' 

oder eine neuere Version als die Abhängigkeit zu Ihrer build.gradle Build-Datei

In Ihrer ResponseDateModel Klasse verwendet @SerializedName("key_name") als Anmerkung für jedes Feld dann muss in der Modellklasse kein Konstruktor erstellt werden

Schlüssel_Name ist ein Schlüssel im JSON-Objekt.

{ 
    "key_name":"key_value" 
} 

wie ich erstellt habe.

ResponseDataModel.java

public class ResponseDataModel { 

@SerializedName("data") 
@Expose 
private Data data; 
@SerializedName("requestStatus") 
@Expose 
private Boolean requestStatus; 

public Data getData() { 
return data; 
} 

public void setData(Data data) { 
this.data = data; 
} 

public Boolean getRequestStatus() { 
return requestStatus; 
} 

public void setRequestStatus(Boolean requestStatus) { 
this.requestStatus = requestStatus; 
} 

} 

Erstellen Sie außerdem eine weitere Modellklasse (zB Data.java)

Data.java

public class Data { 

@SerializedName("id") 
@Expose 
private String id; 
@SerializedName("ttl") 
@Expose 
private Integer ttl; 
@SerializedName("created") 
@Expose 
private String created; 
@SerializedName("userId") 
@Expose 
private Integer userId; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

public Integer getTtl() { 
return ttl; 
} 

public void setTtl(Integer ttl) { 
this.ttl = ttl; 
} 

public String getCreated() { 
return created; 
} 

public void setCreated(String created) { 
this.created = created; 
} 

public Integer getUserId() { 
return userId; 
} 

public void setUserId(Integer userId) { 
this.userId = userId; 
} 

} 

Nein w parse string response von BufferedReaded in ResponseDataModel.java Klassenobjekt.

try { 
    ResponseDataModel responseDataModel = new GsonBuilder().create().fromJson(response, ResponseDataModel.class); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

finale Code

BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String line; 
StringBuffer response = new StringBuffer(); 
while ((line = rd.readLine()) != null) { 
     response.append(line); 
     response.append('\r'); 
} 

try { 
    ResponseDataModel responseDataModel = new GsonBuilder().create().fromJson(response, ResponseDataModel.class); 
String userID = responseDateModel.getData().getId(); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

rd.close(); 
Verwandte Themen