2010-08-26 3 views
8

J'essaie d'obtenir une réponse JSON de notre serveur et la chaîne de réponse semble toujours être tronquée lorsque la longueur de la chaîne atteint environ 5525 caractères. J'ai également essayé ceci en utilisant HttpEntity et en lisant le flux de réponse. Mais cela tronque aussi la corde à peu près à cette longueur.La chaîne est tronquée quand elle est trop longue

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

Veuillez me faire savoir comment je peux gérer ce problème. J'ai utilisé ce post comme référence en créant ceci. http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-restful-client-at-android/

Merci.

+0

Etes-vous sûr que le serveur est en retour la chose entière? Vous pouvez utiliser quelque chose comme http://code.google.com/p/rest-client/ pour le frapper et afficher la réponse complète. –

+0

oui je suis sûr que le serveur retourne le tout, je l'ai testé à partir de mon navigateur et il renvoie l'ensemble du json. – achie

+0

Bien qu'il soit 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 maxLogSize = 1000; pour (int i = 0; i <= veryLongString.length()/maxLogSize; i ++) { int début = i * maxLogSize; < int end = (i + 1) * maxLogSize; end = fin> veryLongString.length()? veryLongString.length(): end; Log.v (TAG, veryLongString.substring (début, fin)); } ' –

Répondre

13

tout d'abord remercie tout le monde pour 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 un problème dans mon format de réponse json et mon code d'analyse crache une erreur. J'ai donc commencé à essayer de le déboguer en imprimant la chaîne json de réponse dans logcat. Ceci est toujours tronqué et je devinais jusqu'à maintenant que la réponse du serveur lui-même est tronquée.Aujourd'hui, j'ai commencé à jouer avec le générateur de chaîne de réponse et j'ai dû écrire des extraits amusants pour compter les caractères et détecter les caractères aux positions auxquelles je m'attendais et j'ai trouvé que la réponse était retournée complètement. J'ai également testé mon code sur d'autres grandes piqûres et j'ai découvert que le logcat a une limite sur la longueur de la chaîne qu'il affiche ou du moins il a l'air ainsi. C'est pourquoi mes réponses étaient affichées comme des chaînes tronquées et je pensais que c'était le problème avec mon code.

Donc, cela fonctionne 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 cela ne me dérange pas [au moins en ce moment].

Merci encore à tous pour votre aide.

1

Utilisez un BasicResponseHandler:

Cet exemple montre comment processus réponses HTTP en utilisant un gestionnaire de réponse . C'est la manière recommandée d'exécuter les demandes HTTP et de traiter les réponses HTTP . Cette approche permet à l'appelant de se concentrer sur le processus de digérer les réponses HTTP et à de déléguer la tâche de ressource système à HttpClient. L'utilisation de une réponse HTTP garantit que le connexion HTTP sous-jacente sera communiqué automatiquement à la connexion manager dans tous les cas.

+0

J'ai essayé celui-ci aussi. Mais je l'ai encore essayé juste pour doublecheck et même fait une nouvelle application pour vérifier juste cela et il fait toujours la même chose. La longueur de la chaîne renvoyée est toujours 5524 – achie

1

Il est possible que le serveur puisse faire la différence entre votre navigateur et votre application et qu'il réponde différemment.

Hack votre code Java pour imprimer les en-têtes de demande et de réponse, et les comparer avec les en-têtes que vous obtenez lorsque vous utilisez votre navigateur.

Essayez également de faire la demande en utilisant curl et/ou wget depuis la ligne de commande. Ceux-ci vous donnent beaucoup plus d'informations, ainsi que la possibilité de définir des en-têtes de requête.

0

Chaîne de caractères = reader.readLine(); Je crois que la ligne ci-dessus dans votre programme est le problème. Il lit une ligne de la réponse du serveur et la ligne de chaîne. Si la réponse du serveur a un saut de ligne (\ n), le lecteur ne pourra pas lire la ligne après cela.

utiliser les éléments suivants pour éviter que ..

if (responseCode == HttpURLConnection.HTTP_OK) {

  InputStream in = ((URLConnection) httpConnection).getInputStream(); 
      int len = 0; 


      byte[] data1 = new byte[1024]; 
      while (-1 != (len = in.read(data1))) 
       dataFromServer.append(new String(data1, 0, len)); 

     } 
0

Bien que ce soit assez tard, mais peut aider quelqu'un d'autre j'ai utilisé ce code pour afficher la chaîne complète LONG. Trouvé quelque part sur un même site

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

S'il vous plaît Vote up si trouvé utile :)

Questions connexes