Android中的HTTP响应

这个问题在这里已经有了答案:

  • 我该如何解决android.os.NetworkOnMainThreadException? 49个答案

  • 每当您尝试直接在主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

    上一篇: HTTP Response in Android

    下一篇: Java Client Socket Connection in Android