timeout参数对Titanium.Network.createHTTPClient没有任何影响

时间:2012-04-11 11:25:06

标签: android titanium titanium-mobile titanium-modules

我希望用户等待指定的时间(4秒)才能连接到服务器。如果在指定的时间段内无法连接,应该关闭应用程序。

这是我编码的内容:

var downloadDataReq = Titanium.Network.createHTTPClient({timeout :4000});
downloadDataReq.onload = function() { //some code }
downloadDataReq.onerror = function(event) { //some code }
var urlToDownloadData = 'http://www.google.com';
downloadDataReq.open("POST", urlToDownloadData);
downloadDataReq.send();

问题是app等待修复时间(超时参数根本不起作用)。

P.S。:使用Titanium为Android制作应用程序。

3 个答案:

答案 0 :(得分:0)

尝试使用这样的方法:

downloadDataReq.setTimeout(4000);

答案 1 :(得分:0)

对我来说,HTTP请求的超时不能正常工作。我有非常奇怪的问题,例如:

  • 如果我将1000毫秒超时,它将在2或3秒内被调用。
  • 如果我把2000毫秒超时或超过,它将永远不会被调用。

我正在使用Android ICS和JB,而且我都遇到了上述问题。似乎超时参数是错误的。

作为一种解决方法,我正在onload中进行检查(例如:如果我正在下载文件,我将本地文件的校验和与服务器上相同文件的校验和进行比较),我正在模拟使用JavaScript的setTimeout超时。它正在发挥作用。

下面的代码演示了如何使用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)。

我仍在测试这个解决方案,但至少现在,它为我解决了一些错误。

答案 2 :(得分:-1)

试试这个。

Ti.App.timeOut = 99000; //在app.js中声明

然后在项目中使用anyWhere。但是每次创建httpClient时都要确保。 不要在代码中或通过页面重新创建或重新定义。 这对我来说很好。

//看看这个用途 var xhr = Titanium.Network.createHTTPClient({timeout:Ti.App.timeOut});