2016-06-01 10 views
1

ローカルのモバイルDBのデータベースからすべてのデータを取得するために初めてアプリケーションを起動するときに、起動時に12のWeb APIを呼び出す必要があります。 私の要件は、12のWeb APIの中で、ネットワークエラーやタイムアウト、または他のボレーの実行が同じ瞬間に停止する必要があるため、いずれかが失敗した場合です。 いずれか私にそれを行う方法を教えてください。VolleyによってWeb APIの実行を中止する方法

私はキャッシュをクリアして、ボレーのエラーメソッドでキャンセルしようとしましたが、それでも私はさらなるウェブAPIの応答をegttingしています。エラーで

のWeb APIを呼び出す

for (String data : mWebApiList) { 
     switch (data) { 
      //Dashboard 
      case data1: 
       webAPICalling.callDashBoardApi(mContext, this); 
       break; 
      //Loan Type 
      case data2: 
       webAPICalling.callLoanTypeWebApi(mContext, this); 
       break; 
      //Help FAQs 
      case data3:: 
       webAPICalling.callHelpFaqsWebAPI(mContext, this,false); 
       break; 
       : 
       : 
       break; 


     } 
    } 

私はすべての要求をキャンセルするが、仮定する3と7のWeb APIを聞かせています、まだ成功し、失敗となり、すべての4 5 6 7 8 9用とエラーに呼びかけています7も同様です。私は3後に他のWeb APIがexevuteすることができますしたい。

public void onError(String status) { 

    SFApplication. getInstance().getRequestQueue().clearAll(TAG); 
    SFApplication.getInstance().getRequestQueue().getCache().clear(); 
    } 

答えて

1

あなたはそれがcancelAll(TAG)が同様に何をするかだが、順番にそれぞれの要求にcancel()を呼び出そうとすることができます。

さらに詳しい情報hereとリクエストをキャンセルする方法についてもあります。

これは、リクエストハンドラを呼び出さないことを保証しますが、要求が完了するのを止めない可能性があります。つまり、HTTPハンドラを呼び出す前に要求がキャンセルされていないことをライブラリがチェックするという、完全なHTTP要求 - 応答のダンスが発生する可能性があります。 NetworkDispatcher.javaを見ると、ExecutorDelivery.javaRequest.javaもこれを裏付けているようです(キャンセルの検索)。

1つのエグゼキュータスレッドを指定すると、要求がシリアルに送信されますが、通常は12個の要求がすべて正常に処理されるため、パフォーマンスが低下します。

+0

ありがとうHoria、私はonErrorメソッドでそれをやっている停止の代わりに、すべての要求をキャンセルする同じをしようとしているが、依然としてすべての要求の実行が完全に行われます。私は自分のコードも詳細に更新しました。 –

+1

あなたのアプリのアーキテクチャーは詳細からは明らかではありませんが、アプリの開始時にリクエストをかなり早く追加しているようです。 Volleyは、12のすべてのリクエストを並行して実行しようとします(指定した設定まで)。 1つのリクエストが失敗するまでには時間がかかるので、その時間までに他のユーザーは飛行していて、答えが示すように、飛行中のリクエストのTCP/IPやHTTPレベルのキャンセルはありません。あなたはそれらについて通知されません。 –

+0

こんにちはHoria、 "あなたはただ彼らについて通知を受けていません"と、あなたは私がそれらについて通知されないと言っていますが、間違いで他の人を成功させるなら、コールバックを受けています。それらの通知を停止する方法はありますか? –

0

はい、@ホリアのように、ボレーリクエストは並行して呼び出されます。あなたが試みている要件については、1番目のAPIの成功後に次のWeb APIを実行するような、Web API呼び出しを入れ子にすることによって達成することができます。これが助けてくれるといいなあ

関連する問題