Android设备上CodeNameOne构建中的SocketTimeoutException

Android设备上CodeNameOne构建中的SocketTimeoutException,android,codenameone,Android,Codenameone,我已经构建了一个CodeNameOne应用程序,它可以在模拟器的所有皮肤中正常工作。它在iPad上也能正常工作。但在不同的安卓设备上则不然。我试过三星平板电脑、华为MadiaPad安卓4.1.2和三星S4迷你安卓4.2.2 应用程序建立连接以获取一些配置选项,这工作正常,并返回结果。接下来,它建立连接以获取更多数据。这将导致SocketTimeoutException 这是基本代码: NetworkManager networkManager = NetworkManager.getInstan

我已经构建了一个CodeNameOne应用程序,它可以在模拟器的所有皮肤中正常工作。它在iPad上也能正常工作。但在不同的安卓设备上则不然。我试过三星平板电脑、华为MadiaPad安卓4.1.2和三星S4迷你安卓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);
如果我将url粘贴到浏览器中,加载大约需要10秒钟。这很长,但我不明白为什么会有问题。 NetworkManager.getTimeout提供300000。 request.getTimeout给出-1。 我曾尝试将两个超时设置为不同的值,但现在我只是尝试随机设置,希望它能有所帮助


尤其令我惊讶的是,iPad和模拟器处理得很好。不知何故,Android设备在处理更长的连接时有些不同。谁能帮我照一下这个吗?谢谢大家!

Android有一个不同的超时设置,因为一些设备/操作员在各种情况下都不稳定,会导致死机连接延迟

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

request.setTimeout(120000);
在调用addtoqueue方法之前


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

谢谢@Shai Almog,似乎可以。我不再收到SocketTimeoutException。我仍然无法正确处理结果。它的长度是62317字节,但看起来在处理完前50519字节后,它就停止了。在这一点上,这些角色似乎没有什么不寻常之处。是否有缓冲区限制或类似的东西我遗漏了?不要介意最后一部分。使用StringBuilder而不是StringBuffer修复了该问题。