Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android HttpGet:在执行请求之前应该检查哪些异常?_Android - Fatal编程技术网

Android HttpGet:在执行请求之前应该检查哪些异常?

Android HttpGet:在执行请求之前应该检查哪些异常?,android,Android,更新: 更新结束 我正在构建一个从网站读取数据的应用程序,我想知道在执行请求之前应该检查哪些异常 我想到的例外情况是: String xmlList = null; // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); try { HttpGet request = new HttpGet(U

更新:

更新结束

我正在构建一个从网站读取数据的应用程序,我想知道在执行请求之前应该检查哪些异常

我想到的例外情况是:

String xmlList = null;
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            try {

                HttpGet request = new HttpGet(URL);
                HttpResponse response = null;
                response = httpClient.execute(request);
                //HttpResponse httpResponse = httpClient.execute(request);
                HttpEntity httpEntity = response.getEntity();
                xmlList = EntityUtils.toString(httpEntity);

             } 
            catch (MalformedURLException e) {
                xmlList = "URL: is a malformed URL";
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                xmlList = "URL: UnsupportedEncodingException";
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                xmlList = "URL: ClientProtocolException"; 
            } catch (SocketTimeoutException  e) {
                e.printStackTrace();
                xmlList = "URL: SocketTimeoutException";
            } catch (ConnectTimeoutException  e) {
                e.printStackTrace();
                xmlList = "URL: ConnectTimeoutException";
            } catch (IOException e) {
                xmlList = "URL: IOException";
                e.printStackTrace();
            } 
            finally {
                httpClient.getConnectionManager().shutdown();
            }  
            // return XML
            return xmlList; 
这是我的密码:

1) bad url
2) host not responding
3) time out
....
....
您可以检查是否有,如果没有,向用户显示一条消息,说明无论应用尝试什么都是不可能的。
但是不需要进一步检查,因为您可以看到从查询结果中得到的信息:异常(例如错误的url、超时等)、状态代码等。

您可以执行以下检查

  • 客户端协议异常
  • IOException-这在内部捕获了很多异常。您可以在android文档中查看详细信息
  • URISyntaxException

  • 您可以在发送请求之前进行网络连接检查。详细信息见zapl帖子中提供的链接。

    在发出请求之前,您如何检查主机是否没有响应(这与超时有何区别?您认为主机没有响应,超时时间相同,没有想到:)我更新了我的问题,这是捕捉异常的正确方法吗?捕捉的次数很多,但看起来很好。只有当你想在每种情况下单独做不同的事情时,你才需要抓住它们。我假设您想告诉用户请求失败的确切原因。在这种情况下,这看起来不错。:)
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpGet request = new HttpGet(SongsManager1.URL);
    HttpResponse response = null;
    response = httpClient.execute(request);
    //HttpResponse httpResponse = httpClient.execute(request);
    HttpEntity httpEntity = response.getEntity();
    xmlList = EntityUtils.toString(httpEntity);