我该怎么做才能解决连接问题?

时间:2012-07-22 02:59:57

标签: java android jsoup socketexception

我有一个使用JSoup连接到Web服务器的应用程序,它工作正常。不幸的是,所述Web服务器不是很可靠。我经常因为超时连接而得到SocketException。我在一个修改过的IntentService中建立了连接,我只是在catch(Exception e)块中重复 onHandleIntent(intent)

catch(Exception e){
Log.d(Tag, "in catch Exception block...");   
onHandleIntent(intent);
}

理论上,这应该有效。但有时,我得到堆栈溢出错误,并且应用程序结束得相当不合理。那么,我该怎样做才能让它变得更好?

我想继续调用onHandleIntent,所以,也许我必须在迭代中而不是递归地调用它。如果您可以就如何迭代实现这一点给我建议,那将非常有帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

  

我想继续调用onHandleIntent,所以,也许我必须在迭代中而不是递归地调用它。

这是正确的。如果你以递归方式处理这个问题,那么连续超时的服务器将不可避免地会导致堆栈溢出。

  

如果你可以就如何迭代实现这个问题给我建议,那将非常有帮助。谢谢!

这样的事情:

for (int tries = 1; ; tries++) {
    Connection conn = null;
    try {
        // attempt to connect
        // do stuff
    } catch (SocketException ex) {
        if (/* timed out */ && tries < MAX_TRIES) {
            continue;
        }
        // report exception
    } finally {
        if (conn != null) {
            // close it
        }
    }
    break;
}

(也许有人会想到一种不那么“笨拙”的方式来写这个...)