对我来说,HTTP 请求的超时不能正常工作。我有非常奇怪的问题,例如:
- 如果我设置 1000 毫秒超时,它将在 2 或 3 秒后被调用。
- 如果我设置 2000 毫秒或以上的超时时间,它将永远不会被调用。
我正在使用 Android ICS 和 JB,两者都遇到了上述问题。似乎超时参数是错误的。
作为一种解决方法,我正在 onload 内部进行检查(例如:如果我正在下载文件,我将本地文件的校验和与服务器上同一文件的校验和进行比较),并且我正在使用 JavaScript 模拟超时设置超时。它的工作范围很广。
下面的代码演示了如何使用 JS 的 setTimeout 命令模拟请求超时:
var downloadDataReq = Titanium.Network.createHTTPClient();
downloadDataReq.onload = function() {
clearTimeout(timeout);
alert('loaded');
}
downloadDataReq.onerror = function(e) {
clearTimeout(timeout);
alert('error: ' + e.error);
}
var urlToDownloadData = 'http://10.1.1.183/maquina_local/arquivos/FirefoxPortable_12.0_PortugueseBR.paf.exe';
downloadDataReq.open("GET", urlToDownloadData);
var timeout = setTimeout(function(){
downloadDataReq.onload = function(){
downloadDataReq.onerror({'error': 'timeout'});
};
downloadDataReq.abort();
}, 4000);
downloadDataReq.send();
在超时时,我将 onload 事件更改为 onerror 之一,因为如果您尝试中止正在运行的请求,它将触发“onload”事件,而不是“onerror”。如果你不这样做,这个问题可能会给你损坏的文件(例如:一个 20mb 的文件,当请求被中止时,文件将不完整,大小小于 20mb)。
我仍在测试这个解决方案,但至少现在,它为我解决了一些错误。