1

サーバーに接続するために、ユーザーが指定された時間(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();

問題は、アプリが修正時間を待機することです(タイムアウトパラメーターはまったく影響しません)。

PS:チタンを使用してAndroid用のアプリを作成します。

4

3 に答える 3

0

次のような方法を使用してみてください。

downloadDataReq.setTimeout(4000);
于 2012-04-11T11:54:35.477 に答える
0

私にとっては、HTTP リクエストのタイムアウトが正常に機能していません。次のような非常に奇妙な問題がありました。

  • 1000 ミリ秒のタイムアウトを設定すると、2 秒または 3 秒で呼び出されます。
  • 2000 ミリ秒以上のタイムアウトを設定すると、呼び出されることはありません。

私は Android ICS と JB を使用していますが、両方で上記の問題が発生します。タイムアウト パラメータにバグがあるようです。

回避策として、onload 内でチェックを行っています (例: ファイルをダウンロードしている場合、ローカル ファイルのチェックサムとサーバー上の同じファイルのチェックサムを比較します)。 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 イベントに変更しています。これは、実行中のリクエストを中止しようとすると、「onerror」ではなく「onload」イベントがトリガーされるためです。そうしないと、この問題によってファイルが破損する可能性があります (例: 20 MB のファイルで、リクエストが中止されると、ファイルは 20 MB 未満のサイズで不完全になります)。

私はまだこのソリューションをテストしていますが、少なくとも今のところ、いくつかのバグが解決されました。

于 2013-11-21T14:41:01.337 に答える
-1

これを試して。

Ti.App.timeOut = 99000; // app.js で宣言

次に、プロジェクトでanyWhereを使用します。ただし、httpClientを作成するたびに必ず確認してください。コード内またはページ全体で再作成または再定義しないでください。これは私にとってはうまくいきます。

// この使用方法を確認してください var xhr = Titanium.Network.createHTTPClient({timeout:Ti.App.timeOut});

于 2012-06-08T10:15:57.050 に答える