Android中的HTTP响应
这个问题在这里已经有了答案:
每当您尝试直接在主UI线程上执行长时间运行的任务/进程时,都会发生android.os.NetworkOnMainThreadException
。
要解决这个问题,请在AsyncTask
覆盖您的webservice调用。 仅供参考,Android中的AsyncTask称为“无痛线程”,意味着开发人员无需担心线程管理问题。 因此,使用AsyncTask执行Web API调用或任何长时间运行的任务,Web上提供了大量示例。
更新:
如果http响应代码是200,我只想加载webview。
=>根据您的要求,我会说在doInBackground()
方法中包含您的代码并返回状态码值,您可以在onPostExecute()
检查。 现在你在这里获得状态码值200/201,然后你可以加载WebView。
class HTTPRequest extends AsyncTask<int, Void, void> {
protected int doInBackground() {
try {
HttpGet httpRequest = new HttpGet( "http://example.com");
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httpRequest);
int code = response.getStatusLine().getStatusCode();
return code;
} catch (Exception e) {
e.printstacktrace();
}
}
protected void onPostExecute(int code) {
// TODO: check this.exception
// retrieve your 'code' here
}
}
你得到这个异常,因为你正在执行一个沉重的计算,即在你的UI线程访问网络。
你永远不应该这样做。
相反,您可以将此代码移动到后台Java线程:尝试:
private void doNetworkCompuation()
{
new Thread(new Runnable() {
@Override
public void run() {
HttpGet httpRequest = new HttpGet( "http://example.com");
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httpRequest);
int code = response.getStatusLine().getStatusCode();
}).start();
}
链接地址: http://www.djcxy.com/p/29539.html