1

我有一个 HTTP 连接,由

HttpConnection c = (HttpConnection)Connector.open(url);

其中url之一是:

  • http://foo.bar;deviceside=false
  • http://foo.bar;deviceside=false;ConnectionType=mds-public
  • http://foo.bar;deviceside=true;ConnectionUID=xxxxxxx
  • http://foo.bar;deviceside=true;interface=wifi

如果由于设备未连接到网络而无法建立连接,有什么方法可以导致请求立即出错?事实上,在许多情况下超时大约需要一分钟(特别是在第一次调用从网络获取信息时c.getResponseCode():)

编辑:我的意思是出错了。在一种情况下,特别是 Wifi,如果 wifi 在超时之前没有打开,它会停留几分钟,我希望它立即停止。

4

4 回答 4

6

在尝试建立连接之前,我使用RadioInfo类来检查是否存在连接以及收音机是否已打开。然后,您可以在尝试连接之前向用户显示一条消息或打开收音机(如果它已关闭),从而获得更好的用户体验。

尝试使用:

if (RadioInfo.getState() == RadioInfo.STATE_OFF)
OR
if (RadioInfo.getSignalLevel() == RadioInfo.LEVEL_NO_COVERAGE)

连接前检查连接状态。

于 2009-05-05T15:40:48.570 回答
1

我将我的帖子包含在一个线程中以更快地超时。确保您的“PostThread”捕获所有异常(并保存它们)。

public byte[] post(String url, byte[] requestString){
    PostThread thread=new PostThread(url, requestString);

    synchronized(thread){
        try{
            thread.start();
            thread.wait(TIMEOUT);
        }catch(Throwable e){

        }//method
    }//synch

    if (thread.isAlive()){
        try{
            thread.interrupt();
        }catch(Throwable e){

        }//method
        D.error("Timeout");
    }//endif

    if (thread.error!=null) D.error(thread.error);
    if (thread.output!=null) return thread.output;
    throw D.error("No output");
}//method

还有一个ConnectionTimeout参数,我没有测试过:例如socket://server:80/mywebservice;ConnectionTimeout=2000

于 2009-11-19T09:56:50.853 回答
0

不是任何可以以编程方式指定的方式。这可能很烦人,但来自移动设备(尤其是黑莓手机)的连接通常会在到达目标服务器之前通过几个不同的网络和网关:无线->运营商 APN->互联网->BES(可能)->foo。 bar 服务器,因此内置了较大的超时,以解决任何这些点的潜在延迟。

您可以从 BES/MDS 服务器(或在 JDE 中,从 MDS\config\rimpublic.property 文件)控制默认设备连接超时 - 但这可能对您没有帮助。

于 2009-05-05T15:28:32.123 回答
0

最好从不同的线程进行超时检查,因为即使建立连接也会发生这种情况,比如说网络延迟非常高,所以你不希望用户等待这么长时间或这样的事情。

因此,在这种情况下,请从另一个线程检查当前时间减去为启动连接输入的时间是否大于您设置的时间,请使用 connection.close() 关闭连接!

于 2009-06-23T17:33:52.100 回答