在超时时关闭Blackberry HttpConnection
我有一个计时器任务,它在连接被触发时关闭连接,问题是有时它在连接实际打开之前被触发,如下所示:在超时时关闭Blackberry HttpConnection,blackberry,java-me,httpconnection,Blackberry,Java Me,Httpconnection,我有一个计时器任务,它在连接被触发时关闭连接,问题是有时它在连接实际打开之前被触发,如下所示: try { HttpConnection conn = getMyConnection(); // Asume this returns a valid connection object // ... At this moment the timer triggers the worker wich closes the connection: conn.close();
try {
HttpConnection conn = getMyConnection(); // Asume this returns a valid connection object
// ... At this moment the timer triggers the worker wich closes the connection:
conn.close(); // This is done by the timeTask before conn.getResponseCode()
int mCode = conn.getResponseCode(); // BOOOMMMM!!!! EXPLOTION!!!!
// ... Rest of my code here.
} catch(Throwable e) {
System.out.println("ups..."); // This never gets called... Why?
}
当我尝试conn.getResponseCode()
时,会抛出一个异常,但不是cougt,为什么
我收到以下错误:
clientprotocolbase(HttpProtocolBase)。TransitionState(int)
行:484,未找到源:S。连接位于不同的线程中,并且有自己的生命周期。您正在尝试以同步方式从计时器线程访问它
首先,连接是一个状态机。它从“设置”状态开始,然后在调用某些方法(需要联系服务器的任何方法)时变为“已连接”状态,最后在服务器或客户端终止连接时变为“已关闭”状态。方法getResponseCode
可以使连接从所谓的“设置”状态过渡到“连接”状态(如果尚未连接)。您试图立即获取响应代码,甚至不知道连接是否已建立。您甚至没有让连接时间正确连接或关闭自身。即使可以,也可以看看javadocs对该方法的看法:
关闭连接后,对其任何方法(this close()除外)的访问将导致引发IOA异常
如果关闭连接后确实需要执行某些操作,请向连接传递一个“侦听器”对象,以便在连接关闭时可以回调,并传递回响应代码(如果与服务器的连接曾经建立过)。下面的帖子很好地解释了该场景,按照建议,在关闭连接之前,尝试获取响应代码或读取输入流。