我已经构建了一个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设备中有一些不同的东西可以处理更长的连接。有人可以为我照亮一些吗?谢谢!
答案 0 :(得分:0)
Android有一个不同的超时设置,因为有些设备/运营商在各种情况下都不稳定,导致连接失败。
我猜测在提交连接请求后设置了超时值,以确保只添加以下内容:
request.setTimeout(120000);
在调用add to queue方法之前。
仅供参考,您无需致电NetworkManager.start()
。