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();
其他代码就不用动了。