2012-12-20 38 views
5

我想在Android APP中的服务器上发出HTTPGet请求,但是当我在字符串中更改httpresponse时,该字符串的长度为0。返回字符串长度为0的HttpResponse

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet("http://"+server+path+"?assets="+URLEncoder.encode(query, "US-ASCII")+"&lt="+localTime+"&to="+timeOffset); 
HttpResponse response = httpclient.execute(httpget); 
System.out.println("Status"+ response.getStatusLine()); 
System.out.println("Length "+org.apache.http.util.EntityUtils.toString(response.getEntity()).length()); 
return org.apache.http.util.EntityUtils.toString(response.getEntity()); 

目录下载:

I/System.out(22344): StatusHTTP/1.1 200 OK 
I/System.out(21737): Length 0 

URI是很好的,当我在浏览器中复制/过去,我有这样的结果:

{"ads":[{"i"...],"pxs":{}} 

有没有人有一个想法,为什么我的字符串是空的?

UDPATE 1:

long localTime = System.currentTimeMillis(); 
    Date date = new Date(); 
    @SuppressWarnings("deprecation") 
    int timeOffset = date.getTimezoneOffset(); 

更新2:

我加入这一行:

httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)"); 

现在我有这样的错误:

目录下载

E/AndroidRuntime(23584): FATAL EXCEPTION: AsyncTask #2 
E/AndroidRuntime(23584): java.lang.RuntimeException: An error occured while executing doInBackground() 
E/AndroidRuntime(23584): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
E/AndroidRuntime(23584): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
E/AndroidRuntime(23584): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
E/AndroidRuntime(23584): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
E/AndroidRuntime(23584): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
E/AndroidRuntime(23584): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
E/AndroidRuntime(23584): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
E/AndroidRuntime(23584): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
E/AndroidRuntime(23584): at java.lang.Thread.run(Thread.java:864) 
E/AndroidRuntime(23584): Caused by: java.lang.IllegalStateException: Content has been consumed 
E/AndroidRuntime(23584): at org.apache.http.entity.BasicHttpEntity.getContent(BasicHttpEntity.java:84) 
+1

什么是'localTime'和'timeOffset'?在一个单独的步骤中构建URL,打印其值,将其粘贴到浏览器中,并验证是否获得了内容。 – Perception

+3

最近,我注意到一些资源需要一个有意义的用户代理来防止愚蠢的机器人抓取数据等。 - 这可能是值得试图欺骗一个IE用户代理的。 'httpget.setHeader(“User-Agent”,“Mozilla/5.0(Windows; U; MSIE 9.0; Windows NT 9.0; en-US)”);' – jglouie

+0

@Perception我构建它后复制并通过URL,内容回来。 – GermainGum

回答

3
System.out.println("Length "+org.apache.http.util.EntityUtils.toString(response.getEntity()).length()); 
return org.apache.http.util.EntityUtils.toString(response.getEntity()); 

您正在使用它两次。这就是为什么你得到

java.lang.IllegalStateException: Content has been consumed 

尝试将其设置为参考。

  HttpEntity entity = response.getEntity(); 
      String responseText = EntityUtils.toString(entity); 

然后做你所要做的与responseText。