DefaultHttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(httpRequest);
这段代码在虚拟机可以运行,到真机上却无法运行,后来发现是sdk版本问题,虚拟机用的android
2.2,真机是4.2,会报NetworkOnMainThreadException错误,高版本的android
sdk不允许在主线程中调用这类网络访问的代码,估计主要是怕由于网络原因把应用卡死吧,那就改成用线程去做呗。
新加一个类,把操作放进线程内,在获得响应后返回结果。
代码如下:
public class ThreadExecuteHttpRequest {
HttpUriRequest httpRequest = null;
HttpResponse httpResponse = null;
boolean waitResponse=true;
int MAXTRYCOUNT=50;
public ThreadExecuteHttpRequest(HttpUriRequest
httpRequest)
{
this.httpRequest=httpRequest;
}
public HttpResponse Execute()
{
new Thread()
{
@Override
public void run()
{
DefaultHttpClient client = new DefaultHttpClient();
try {
httpResponse = client.execute(httpRequest);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
waitResponse=false;
}
}.start();
int count=0;
while(waitResponse&&count++
{
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return httpResponse;
}
}
在主线程中改成
HttpResponse httpResponse = new
ThreadExecuteHttpRequest(httpRequest).Execute();
其他代码就不用动了。
本文介绍了解决Android应用中主线程进行网络访问导致的问题。通过创建一个专门的线程类来执行网络请求,并获取响应结果,避免了NetworkOnMainThreadException错误。
4万+

被折叠的 条评论
为什么被折叠?



