String wird abgeschnitten, wenn es zu lange
Ich versuche zu bekommen eine JSON-Antwort vom server und der Antwort-string scheint, wird immer abgeschnitten, wenn die Länge der Zeichenfolge erreicht rund 5525 Zeichen.
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(URL);
ResponseHandler<String> responseHandler= new BasicResponseHandler();
String testResponse = httpClient.execute(post, responseHandler);
Ich habe auch versucht, dies durch die Verwendung HttpEntity und Lesen des response-Streams. Aber auch das schneidet die Zeichenfolge in etwa diese Länge.
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(URL);
// HttpGet get = new HttpGet(URL);
HttpResponse response = null;
HttpEntity entity = null;
InputStream inputStream = null;
BufferedReader reader = null;
String result = "";
try {
response = (HttpResponse)httpClient.execute(post);
entity = response.getEntity();
if(entity != null){
inputStream = entity.getContent();
}
reader = new BufferedReader(new InputStreamReader(inputStream), 8000);
StringBuffer builder = new StringBuffer("");
String line = reader.readLine();
while(line != null){
Log.v(tag, "int max::::::::: "+Integer.MAX_VALUE);
Log.v(tag, "LINE::::::::: "+line+reader.toString());
Log.v(tag, "reader::::::::: "+reader.toString());
builder.append(line+"\n");
line = reader.readLine();
}
inputStream.close();
result = builder.toString();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(inputStream != null){
try{
inputStream.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
Bitte lassen Sie mich wissen, wie kann ich dieses problem behandeln.
Ich habe diesen post als Referenz während der Erstellung dieses.
http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-restful-client-at-android/
Danke.
- Sind Sie sicher, dass der server derzeit Rückgabe der gesamten Sache? Können Sie so etwas wie code.google.com/p/rest-client schlagen Sie es und sehen Sie sich die volle Antwort.
- ja, ich bin sicher, dass der server wieder die ganze Sache, getestet habe ich es aus meinem browser und es hat wieder die gesamte json.
- Obwohl, es ist ziemlich spät, aber kann jemand anderes helfen ich habe diesen code zum anzeigen der komplette code, der sich irgendwo auf derselben Seite
int maxLogSize = 1000; for(int i = 0; i <= veryLongString.length() / maxLogSize; i++) { int start = i * maxLogSize;< int end = (i+1) * maxLogSize; end = end > veryLongString.length() ? veryLongString.length() : end; Log.v(TAG, veryLongString.substring(start, end)); }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstmal danke allen für die Antworten.
Ich habe gerade entdeckt, dass das problem nicht mit meinem code, aber mit der Anzahl der Zeilen, die das logcat angezeigt wird.
Das problem war, dass ich ein problem in meinem json-format der Antwort-und meine Analyse-code spuckt einen Fehler aus. Also habe ich den Versuch gestartet, zu Debuggen, indem Sie den Druck der Antwort der json-string in logcat. Dies wird immer abgeschnitten wurde und ich vermute bis jetzt, dass die Antwort vom server selbst wird abgeschnitten.
Also ich habe heute angefangen zu spielen, mit der Antwort-string builder und zu schreiben, hat lustige snippets zu count Zeichen und erkennen die Zeichen an den Positionen, die ich erwarte, und ich fand, dass die Reaktion wurde vollständig zurückgegeben.
Ich auch getestet, mein code auf einige andere große Bissen-und ich entdeckte, dass die logcat hat ein limit für die Länge der Zeichenfolge, die es zeigt oder zumindest sah es so aus. Das war der Grund, warum meine Antworten waren angezeigt wird, wie abgeschnittene Zeichenfolgen, und ich dachte, dass Ihr das problem mit meinem code.
Also es ist in Ordnung, wie der code ist früher und das einzige problem war
dass die logcat zeigt nicht die komplette Zeichenfolge. Aber es funktioniert nicht
stört mich[atleast jetzt].
Dank nochmal allen für die versuchte Hilfe.
Verwenden
BasicResponseHandler
:Ist es möglich, dass der server kann sagen, der Unterschied zwischen Ihrem browser und Ihre Anwendung und reagiert anders.
Hack Ihre Java-code drucken Sie die request-und response-Header, und vergleichen Sie diese mit den Headern, die Sie bekommen, wenn Sie über Ihren browser.
Auch versuchen dabei die Anfrage mit
curl
- und/oderwget
von der Befehlszeile aus. Diese geben Ihnen viel mehr Informationen und die Möglichkeit die set-request-Header.String line = reader.readLine();
Glaube ich, dass die oben genannte Zeile in deinem Programm ist das problem. Es liest eine Zeile aus der Antwort des Servers und die String-Linie.
Wenn die server-Antwort mit einem line feed (\n), dann ist der Leser nicht in der Lage zu Lesen, die Zeile danach.
verwenden Sie die folgenden, um zu vermeiden, dass..
if (responseCode == HttpURLConnection.HTTP_OK) {
Obwohl, es ist ziemlich spät, aber kann jemand anderes helfen
ich habe diesen code zum anzeigen der kompletten LONG-string. Gefunden irgendwo auf der gleichen Seite
Bitte Stimmen Sie bis wenn gefunden hilfreich 🙂