2010-04-30 5 views
4

Je fais une demande HTTP get comme ceci:Après requête HTTP GET, la chaîne résultante est coupée - le contenu a été consommé

try { 
    HttpClient client = new DefaultHttpClient(); 
    String getURL = "http://busspur02.aseag.de/bs.exe?SID=5FC39&ScreenX=1440&ScreenY=900&CMD=CR&Karten=true&DatumT="+day+"&DatumM="+month+"&DatumJ="+year+"&ZeitH="+hour+"&ZeitM="+min+"&Intervall=60&Suchen=(S)uchen&GT0=Aachen&T0=H&HT0="+start_from+"&GT1=Aachen&T0=H&HT1="+destination+""; 
    HttpGet get = new HttpGet(getURL); 
    HttpResponse responseGet = client.execute(get); 
    HttpEntity resEntityGet = responseGet.getEntity(); 

    if (resEntityGet != null) { 
     //do something with the response 
     Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet)); 
    } 
    ... 
} catch (...) { 
    ... 
} 

Tout fonctionne bien ... le seul problème: la la sortie de Log.i est coupée ... Ce n'est pas la page html complète. Si je fais la même requête dans un navigateur, j'obtiens 3x la sortie en opposition à faire la requête dans l'émulateur et en utilisant le code ci-dessus ... qu'est-ce qui ne va pas?

ERREUR:

04-30 14:01:01.287: WARN/System.err(1088): java.lang.IllegalStateException: Content has been consumed 
04-30 14:01:01.297: WARN/System.err(1088):  at org.apache.http.entity.BasicHttpEntity.getContent(BasicHttpEntity.java:84) 
04-30 14:01:01.297: WARN/System.err(1088):  at org.apache.http.conn.BasicManagedEntity.getContent(BasicManagedEntity.java:100) 
04-30 14:01:01.307: WARN/System.err(1088):  at org.apache.http.util.EntityUtils.toString(EntityUtils.java:112) 
04-30 14:01:01.307: WARN/System.err(1088):  at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146) 
04-30 14:01:01.307: WARN/System.err(1088):  at mjb.project.AVV.ParseHTML.start(ParseHTML.java:177) 
04-30 14:01:01.307: WARN/System.err(1088):  at mjb.project.AVV.ParseHTML.onCreate(ParseHTML.java:139) 
04-30 14:01:01.307: WARN/System.err(1088):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-30 14:01:01.327: WARN/System.err(1088):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
04-30 14:01:01.327: WARN/System.err(1088):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
04-30 14:01:01.327: WARN/System.err(1088):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
04-30 14:01:01.347: WARN/System.err(1088):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
04-30 14:01:01.347: WARN/System.err(1088):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-30 14:01:01.347: WARN/System.err(1088):  at android.os.Looper.loop(Looper.java:123) 
04-30 14:01:01.347: WARN/System.err(1088):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-30 14:01:01.347: WARN/System.err(1088):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-30 14:01:01.357: WARN/System.err(1088):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-30 14:01:01.357: WARN/System.err(1088):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-30 14:01:01.357: WARN/System.err(1088):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-30 14:01:01.357: WARN/System.err(1088):  at dalvik.system.NativeStart.main(Native Method) 
+0

Déterminez si 'EntityUtils.toString' le coupe ou si' Log.i' le coupe. – aioobe

+0

... par exemple en enregistrant la longueur de la chaîne d'origine, puis la chaîne éventuellement coupée. – aioobe

+0

Je vais essayer ça, merci .... il semble être si court, il n'y a rien de "plus" avant ... alors il doit y avoir un problème avec la demande de get ou quelque chose? – MJB

Répondre

6

OK je l'ai résolu. Si je comprends bien, le contenu de l'entité est consommé s'il n'est pas "utilisé". J'ai donc créé un nouvel objet String avec le contenu de l'entité , pour ainsi dire une copie au lieu d'une référence au contenu de l'entité.

try { 
    HttpClient client = new DefaultHttpClient(); 
    String getURL = "http://busspur02.aseag.de/bs.exe?SID=5FC39&ScreenX=1440&ScreenY=900&CMD=CR&DatumT="+day+"&DatumM="+month+"&DatumJ="+year+"&ZeitH="+hour+"&ZeitM="+min+"&Intervall=120&Suchen=(S)uchen&GT0=Aachen&T0=H&HT0="+start_from+"&GT1=Aachen&T0=H&HT1="+destination+""; 
    HttpGet get = new HttpGet(getURL); 
    HttpResponse responseGet = client.execute(get); 
    HttpEntity resEntityGet = responseGet.getEntity(); 
    String sourceString = ""; 

    if (resEntityGet != null) {     
     try { 
      dismissDialog(); 
      sourceString= new String(EntityUtils.toString(resEntityGet)); 
      Log.i("GET RESPONSE", sourceString); 
     } catch (ParseException exc) { 
      // TODO Auto-generated catch block 
      exc.printStackTrace(); 
     } catch (IllegalStateException exc) { 
      // TODO Auto-generated catch block 
      exc.printStackTrace(); 
     } 
     ... 
    } 
    ... 
} catch(...) { 
... 
} 
1

Je pense que Log limite le nombre de caractères à 4070. J'ai essayé d'afficher une longue chaîne dans DDMS locgat et je suis seulement 4070 caractères.

3

DixieFlatline est correct.

Avec cela, j'obtenir une sortie partielle:

Log.v(TAG, "RESPONSE: " + response); 

Avec cela, j'obtenir une sortie complète:

for(String line : response.split("\n")) 
    Log.v(TAG, "LINE: " + line); 
0

Great!

Par ailleurs, si vous utilisez Eclipse avec la perspective de débogage, à la vue "Variables":

(Fenêtre -> Afficher la vue -> Variables)

vous pouvez clic droit sur la fenêtre, sélectionnez "Longueur max" et insérez "0". De cette façon, vous pouvez voir tous les caractères (le HTML complet) dans la vue Variables.

Questions connexes