J'essaie d'obtenir une réponse JSON de notre serveur et la chaîne de réponse semble toujours tronquée lorsque la longueur de la chaîne atteint environ 5525 caractères.
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(); } } }
5 Réponses :
Utilisez un BASICResponseHandler code>
: P>
Cet exemple montre comment processus http réponses à l'aide d'un gestionnaire de réponse. C'est le manière recommandée d'exécuter http Demandes et traitement HTTP réponses. Cette approche permet le appelant pour se concentrer sur le processus de digérer les réponses HTTP et à Déléguer la tâche de la ressource système distribution à httpclient. L'utilisation de une réponse HTTP garantit que le La connexion HTTP sous-jacente sera Retour à la connexion gestionnaire automatiquement dans tous les cas. P> blockQuote>
J'ai essayé celui-ci aussi. Mais je l'ai encore essayé juste à Doublecheck et j'ai même fait une nouvelle application pour simplement vérifier cela et cela fait toujours la même chose. La longueur de la chaîne renvoyée est toujours en cours de 5524
Il est possible que le serveur puisse dire la différence entre votre navigateur et votre application et réagir différemment. P>
pirater votre code Java pour imprimer les en-têtes de la requête et de la réponse et comparez-les avec les en-têtes que vous obtenez lors de l'utilisation de votre navigateur. p>
Essayez également de faire la demande en utilisant CURL code> et / ou
wget code> de la ligne de commande. Celles-ci vous donnent beaucoup plus d'informations, ainsi que la possibilité de définir des en-têtes de demande. P>
Ligne de chaîne = Reader.Readline ();
Je pense que la ligne ci-dessus dans votre programme est le problème. Il lit une ligne de la réponse du serveur et de la ligne de cordes. Si la réponse du serveur a une alimentation de ligne (\ n), le lecteur ne sera pas en mesure de lire la ligne après cela. P>
Utilisez ce qui suit pour éviter cela. P>
Si ( Responsecode == httpurlconnection.http_ok) { p>
Faire `chaîne de chaîne = lecteur.readline (); tandis que (ligne! = null) {line = lave.readlineLine (); } 'est fondamentalement la même chose.
Tout d'abord, merci à tout le monde de répondre. P>
Je viens de découvrir que le problème n'est pas avec mon code mais avec le nombre de lignes que le logcat affiche. Le problème était que j'ai eu un problème dans mon format de réponse JSON et que mon code analysant crache une erreur. J'ai donc commencé à essayer de le déboguer en imprimant la chaîne de réponse JSON dans logcat. Ceci est toujours tronqué et je devinais jusqu'à maintenant que la réponse du serveur lui-même est tronquée. p>
Alors aujourd'hui, j'ai commencé à jouer avec le constructeur de cordes de réponse et je dois écrire des extraits amusants pour compter des personnages et détecter les personnages aux postes que j'attendais et j'ai constaté que la réponse était complètement renvoyée. J'ai également testé mon code sur d'autres grandes taches et j'ai découvert que le logcat a une limite sur la longueur de la chaîne qu'il affiche ou au moins elle l'a semblé. C'est pourquoi mes réponses étaient affichées comme des chaînes tronquées et je pensais que c'est le problème avec mon code. P>
Cela fonctionne donc bien comme le code est plus tôt et le seul problème était que le logcat n'affiche pas la chaîne complète. Mais ce n'est pas me dérange maintenant [au moins en ce moment]. P>
Merci encore à tout le monde pour avoir essayé d'aider. p>
Bien que c'est assez tard mais peut aider quelqu'un d'autre
J'ai utilisé ce code pour afficher une chaîne longue complète. Trouvé quelque part sur le même site s'il vous plaît voter si trouvé utile :) p> p>
Êtes-vous sûr que le serveur renvoie actuellement toute la chose? Vous pouvez utiliser quelque chose comme code.google.com/p/res-Client à frappez-le et affichez la réponse complète.
Oui, je suis sûr que le serveur renvoie l'ensemble de la chose, je l'ai testé depuis mon navigateur et retourne tout le JSON.
Bien que c'est assez tard mais peut aider quelqu'un d'autre, j'ai utilisé ce code pour afficher le code complet trouvé quelque part sur le même site
int maximalogsize = 1000; pour (int i = 0; i <= trèslongstring.length () / maxlogsize; i ++) {int start = i * maxlogsize; trèslongstring.length ()? trèslongstring.length (): fin; Log.v (tag, trèslongstring.Substring (début, fin)); } code>