5

Android アプリのサーバーで HTTPGet リクエストを作成しようとしていますが、文字列の httpresponse を変更すると、文字列の長さが 0 になります。

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":{}}

私の文字列が空である理由を誰かが知っていますか?

アップデート 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)
4

1 に答える 1

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

あなたはそれを2回使用しています。それがあなたが得る理由です

java.lang.IllegalStateException: Content has been consumed

参考に設定してみてください。

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

次に、responseText で行う必要があることを行います。

于 2012-12-20T03:29:49.087 に答える