2016-07-28 11 views
1

私はVolleyを使用して、画像リストをサーバーにアップロードしています。これはサービス内で発生します。画像がアップロードされると、それをリストから削除します。この問題は、インターネット接続が切断されたときに発生します。インターネット接続が途切れて再び起きると、まだアップロードされていない画像をリクエストキューに追加することを考えています。Androidのボレー - サーバーと同じ種類の複数のリクエストを避けますか?

これにより、同じイメージの要求が既に受信されている可能性があるため、同じイメージの複数のコピーがサーバーに保存される可能性があります。

このシナリオにはどのように対処できますか?

+0

たぶん、あなたはサーバのDBに格納されているファイルごとにハッシュを計算することができexistend画像のリストから削除AN要求を開始した場合、画像の新しいセットを送信するときは、デシベルでのものとハッシュを比較します...これはおそらく最善の解決策ではなく、私の心の中にあった最初のものです。 – David

+0

ええ、私はそれを考えました。しかし、私はそのようなサーバーコードを変更したくありません。私はこの事件をアプリ自体から防ぎたい。 – user3282666

+0

それでは、1つのファイルがサーバーに正常にアップロードされるたびに、次回はそれを覚えておくことができるたびに、イベントについてはどうでしょうか。だから多分リストから各画像をアップロードしてくださいonPostRequestリストから画像を削除して次の画像を続けてください – David

答えて

2

サービスを使ってリクエストをスケジュールする理由がわかりません。なぜなら、バレーはリクエストを別のスレッドで自動的に実行するからです。

リスナーを追加するだけで、両方のリクエストの結果を正常に受信できたかどうかを確認できます。

ボレーを使用してリクエストをスケジュールするとすぐに、リストからイメージを削除できます。それが成功した場合、あなたが望むように続けることができますが、失敗した場合は、あなたのリストに再び追加するだけです。

public static Request getImageUploadRequest(final String image) { 
    Response.Listener<T> responseListener = new Response.Listener<T>() { 
       @Override 
       public void onResponse(T response) { 
        // do whatever you like 
       } 
    }; 

    Response.ErrorListener errorListener = new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // put the image back onto the list 
        SomeClass.addImageToList(image); 
       } 
    }; 

    return new JsonArrayRequest(Request.Method.GET, YOUR_URL, null, responseListener, errorListener); // Use any subclass of Request you like 
} 
+0

しかし、 "onErrorResponse(VolleyError error)"ではどの画像がアップロードに失敗したのか分かりますか? "error"引数にはそのような情報はありません。 – user3282666

+0

そうです。ただし、最初にリクエストを作成した場合は、引数をエラーリスナーに渡すことができます。私は私の答えを更新します。 – Endzeit

+0

ありがとう!これは、匿名の内部クラスが最終的なローカル変数にアクセスできるという事実を利用していますか? – user3282666

関連する問題