在HTTP GET请求之后,结果字符串被截断 - 内容已被占用 [英] After HTTP GET request, the resulting string is cut-off - content has been consumed

查看:800
本文介绍了在HTTP GET请求之后,结果字符串被截断 - 内容已被占用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  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 = +月+ &安培; DatumJ = +年+ &安培; ZeitH = +小时+ &安培; ZeitM = +分钟+ &安培; INTERVALL = 60安培;俗尘=(S)uchen&安培; GT0 =亚琛&安培; T 0 = H&安培; HT0 = + start_from + &安培; GT1 =亚琛&安培; T 0 = H&安培; HT1 = +目的地+;
HttpGet get = new HttpGet(getURL);
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();

if(resEntityGet!= null){
//对响应做
Log.i(GET RESPONSE,EntityUtils.toString(resEntityGet));


catch(...){
...
}

这一切都很好......唯一的问题是:Log.i的输出被截断......它不是完整的html页面。如果我在浏览器中发出相同的请求,我会得到3x的输出,与在仿真器中发出请求并使用上面的代码相反......出现了什么问题?



错误:

  04-30 14:01:01.287:WARN / System.err(1088):java.lang.IllegalStateException :内容已被占用
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):在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.Parse HTML.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。访问$ 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):在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:0 1.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)


解决方案

好的,我解决了它。
据我所知,实体的内容如果没有被使用 。所以我用 Entity 的内容创建了一个新的 String 对象,所以说一个副本而不是对实体内容的引用。

  try {
HttpClient client = new DefaultHttpClient();
String getURL =http://busspur02.aseag.de/bs.exe?SID=5FC39&ScreenX=1440&ScreenY=900&CMD=CR&DatumT=\"+day+\"&DatumM=\"+月+ &安培; DatumJ = +年+ &安培; ZeitH = +小时+ &安培; ZeitM = +分钟+ &安培; INTERVALL = 120安培;俗尘=(S)uchen&安培; GT0 =亚琛&安培; T 0 = H&安培; HT0 = + start_from + &安培; GT1 =亚琛&安培; T 0 = H&安培; HT1 = +目的地+ ;
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自动生成的catch块
exc.printStackTrace();
} catch(IllegalStateException exc){
// TODO自动生成的catch块
exc.printStackTrace();
}
...
}
...
} catch(...){
...
}


I'm making a http get request like this:

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 (...) {
    ...
}

It all works well... the only problem: the output from Log.i is cut-off... It's not the complete html page. If I make the same request in a browser, I get 3x the output in opposition to making the request in the emulator and using the above code.... what's wrong?

ERROR:

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)

解决方案

OK I solved it.
As I understand, the content of the entity gets consumed if it's not "used". So I created a new String object with the content of the Entity, so to say a copy instead of a reference to the entity's content.

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(...) {
...
}

这篇关于在HTTP GET请求之后,结果字符串被截断 - 内容已被占用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆