Android 如何避免超时异常?

Android 如何避免超时异常?,android,json,eclipse,connection,timeout,Android,Json,Eclipse,Connection,Timeout,我正在尝试创建一个依赖于JSON响应的android应用程序。有时,服务器需要花费大量时间进行响应,并以超时异常结束。因此,我想添加一个限制,比如如果没有响应,我的webservice调用应该在20秒后中止。你能帮我实现这个想法吗 提前感谢。您没有提供关于实际实现的详细信息 然而,搞乱超时似乎是对应该修复的潜在问题的紧急修复 然而,使用WebSocket进行传输可能是一种可能的、可能更优雅的解决方案。一旦创建,它们就在客户机和服务器之间提供了持久连接 有几种方法可以实现这一目标 我们可以使用Ht

我正在尝试创建一个依赖于JSON响应的android应用程序。有时,服务器需要花费大量时间进行响应,并以超时异常结束。因此,我想添加一个限制,比如如果没有响应,我的webservice调用应该在20秒后中止。你能帮我实现这个想法吗


提前感谢。

您没有提供关于实际实现的详细信息

然而,搞乱超时似乎是对应该修复的潜在问题的紧急修复

然而,使用WebSocket进行传输可能是一种可能的、可能更优雅的解决方案。一旦创建,它们就在客户机和服务器之间提供了持久连接


有几种方法可以实现这一目标

我们可以使用HttpURLConnection来执行http请求

public String doPost() {
    if (!mIsNetworkAvailable) {
        return null;
    }

    try {
        URL url = new URL(mURL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setDoInput(true);
        for (String key : mHeadersMap.keySet()) {
            conn.setRequestProperty(key, mHeadersMap.get(key));
        }
        conn.setRequestProperty("User-Agent", "Android");
        conn.setConnectTimeout(30000);
        conn.setReadTimeout(30000);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.getOutputStream().write(mContent);
        conn.getOutputStream().flush();
        int rspCode = conn.getResponseCode();
        if (rspCode >= 400) {
            return null;
        }

        byte[] buffer = new byte[8 * 1024];
        BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int len;
        while ((len = bis.read(buffer)) > 0) {
            baos.write(buffer, 0, len);
        }
        baos.flush();
        final String result = new String(baos.toByteArray());
        baos.close();
        return result;
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
setConnectTimeout:设置连接时等待的最长时间(以毫秒为单位)

setReadTimeout:设置在放弃之前等待输入流读取完成的最长时间


参考资料:

您是否尝试过使用类似于?HttpConnectionParams.setConnectionTimeouthttpParams,20000;