9
votes

La chaîne est tronquée quand c'est trop long

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


3 commentaires

Ê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)); }


5 Réponses :


2
votes

Utilisez un BASICResponseHandler :

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.


1 commentaires

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



1
votes

Il est possible que le serveur puisse dire la différence entre votre navigateur et votre application et réagir différemment.

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.

Essayez également de faire la demande en utilisant CURL et / ou wget 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.


0 commentaires

0
votes

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.

Utilisez ce qui suit pour éviter cela.

Si ( Responsecode == httpurlconnection.http_ok) { xxx


1 commentaires

Faire `chaîne de chaîne = lecteur.readline (); tandis que (ligne! = null) {line = lave.readlineLine (); } 'est fondamentalement la même chose.



14
votes

Tout d'abord, merci à tout le monde de répondre.

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.

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.

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].

Merci encore à tout le monde pour avoir essayé d'aider.


0 commentaires

0
votes

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 xxx

s'il vous plaît voter si trouvé utile :)


0 commentaires