HonyComb和DefaultHttpClient

RvE*_*RvE 13 android httpresponse httpclient

在我的代码中我有这个

        Log.d("WFlog (executeRequest)", request.toString()) ;
        httpResponse = client.execute(request);  
        Log.d("WFlog (execute)", request.toString()) ;
Run Code Online (Sandbox Code Playgroud)

使用Android 2.2运行应用程序运行正常,在logcat中我看到两个日志行.

现在使用HonyComb为相同的代码运行应用程序似乎我永远不会正确传递client.execute.我得到的最后一个日志行是"WFlog(executeRequest)".

在此之后,我看到以下内容:

01-27 21:54:45.169: WARN/System.err(390): android.os.NetworkOnMainThreadException
01-27 21:54:45.196: WARN/System.err(390):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1069)
01-27 21:54:45.196: WARN/System.err(390):     at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:368)
01-27 21:54:45.205: WARN/System.err(390):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:208)
01-27 21:54:45.215: WARN/System.err(390):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:431)
01-27 21:54:45.237: WARN/System.err(390):     at java.net.Socket.connect(Socket.java:901)
Run Code Online (Sandbox Code Playgroud)

知道我应该寻找什么吗?

Nic*_*ion 32

有一些新策略允许应用程序和操作系统开发人员为在某些线程上执行的代码设置性能预期.您试图在应用程序的ui线程上调用阻塞网络api.Google已经建立了一个系统,让您知道这是一个坏主意,您可以通过在单独的线程或asyncTask中执行请求来解决此问题.

请阅读博客文章.您可以找到有关在SO和Google上执行异步/多线程应用程序的信息.


Abh*_*rma 5

谢谢尼克.它对我有用.出于开发目的,我只需将线程策略设置为默认值即可

*ThreadPolicy tp = ThreadPolicy.LAX;
StrictMode.setThreadPolicy(tp);*
Run Code Online (Sandbox Code Playgroud)

这应该在最终版本中删除.