CodeNameOne中的SocketTimeoutException在Android设备上构建

时间:2014-10-24 12:37:41

标签: android codenameone

我已经构建了一个CodeNameOne应用程序,可以在emulater中的所有外观中正常工作。它也适用于iPad。但不是在不同的Android设备上。我尝试过三星平板电脑,华为MadiaPad(Android 4.1.2)和三星S4 mini(Android 4.2.2)。

应用程序建立连接以获取一些配置选项,这很有效,它返回结果。接下来,它建立连接以获取更多数据。这会导致SocketTimeoutException。

这是基本代码:

NetworkManager networkManager = NetworkManager.getInstance();
networkManager.start();
ConnectionRequest request = new ConnectionRequest()
{                
    @Override
    protected void readResponse(InputStream input) throws IOException
    {
        // some response handling
    }

    @Override
    protected void handleException(Exception err)
    {
        //some error handling
    }
};
request.setUrl(url);
request.setPost(false);
networkManager.addToQueue(request);

如果我将网址粘贴到浏览器中,则加载大约需要10秒钟。这很长,但我不明白为什么会出现这个问题。 NetworkManager.getTimeout()给出300000。 request.getTimeout()给出-1。 我已经尝试将两个超时设置为不同的值,但现在我只是尝试随机的东西,希望它可能有所帮助。

特别让我感到惊讶的是iPad和模拟器处理这个问题就好了。不知何故,Android设备中有一些不同的东西可以处理更长的连接。有人可以为我照亮一些吗?谢谢!

1 个答案:

答案 0 :(得分:0)

Android有一个不同的超时设置,因为有些设备/运营商在各种情况下都不稳定,导致连接失败。

我猜测在提交连接请求后设置了超时值,以确保只添加以下内容:

request.setTimeout(120000);

在调用add to queue方法之前。

仅供参考,您无需致电NetworkManager.start()