2013-12-19 5 views
8

フラグメントコールバックでAysncTaskを使用するとプログレスバーの状態を維持するのは簡単ですが、ボレーでどのように達成する必要がありますか?私はすることができます、AsyncTaskは古く、ボレーがより速く、より速いので使用しないでください。 ヘルプやヒントは感謝します。ボレーを使用しているときにプログレスバーの状態を維持する方法は?

私は誤解がここにあると思います後にGoogleのボレーを使用して要求

+0

こんにちは@Rahulを終了したときに実行されるキューにリスナーを追加することができますスニペット参照してください? – Dilip

+0

@Rahul、進行状況の読み込みに適したソリューションを見つけましたか? –

+0

私はアクティビティが再作成されないようにconfigChangesを使用します –

答えて

17

を取得しています。

まず、AsyncTaskよりも速いVolley。

これはリンゴとオレンジを比較しています。どちらもスレッドを使用します。ボレースレッドは、非同期タスクのスレッドより高速ではありません。待ち行列は別々ですが、それはそれについてです。 API 11 &では、AsyncTaskインスタンスに対して独自のスレッドプールを使用することができます。

第2に、よりよく定義します。

  • バレーボールは、サーバーへの光ペイロード(GET/POST)の多くを送信し、戻ってかなり速い応答を取得するために設計されています。これらの応答は、発信者が使用することができます。

  • AsyncTaskは、UIスレッドから所定のタスクを完了し、そのタスクの状態に関するさまざまなコールバックを提供するように設計されています。

ProgressBar私はあなたが実行中のリクエストの進行状況を判断しようとしていると考えています。ボレーの世界では、これらの小さなものが予想されるので、あなたはかなり3つの州があります。開始、実行中(開始解析も含む)、完了(成功、エラー、キャンセル済みなど) AsyncTaskと知っているとおり、publishProgressを使用するとonProgressのコールバックがあります。したがって、インスタンスは、進捗状況を示すために送信したいものを定義できます。

ペイロードが大きく、サーバーに転送するのに時間がかかる場合は、Volleyが適切でない可能性があります。 Volleyは素晴らしい仕事をしないし、サーバーとの間で大きなペイロードを送信するという素晴らしい仕事をしようともしません。理由は、これはそれが意味するものではないということです。それは、すべてのペイロード、アップロードと受信が完全にメモリに収まる必要があるように。そのため、1MBのペイロードと1MBのレスポンスのようなものがあります。

Volleyは素晴らしいライブラリですが、使用することをお勧めします。詳細については、コードのドキュメントと実装をお読みください。

時間がかかりそうなことをやっているなら、コンテンツを送受信する特定の要求タイプを記述します。そうすれば、どのくらいの作業が要求に残っているかを知ることができます。私はあなたが送信バイトを使用していると仮定して、進捗の指標として受け取ります。

+0

私はボレーを使用する必要があります。それは強制的なもののようなものです。問題は、ボレーで進歩バーの状態を維持することにあります。あなたはそれで私を助けることができます –

+0

何していますか?進捗バーは何を表していますか?あなたはバレーを使用して送受信していますか? –

+0

単純なログインアプリケーションでは、私はボレーを使用しています。私は非同期を使用する場合、私は画面を回転させるときにプログレスバーの状態を維持することができますが、ボレーの場合はどうすればいいですか? –

4

これはかなり単純な修正です。ボレーのリクエストを行う前に、progress.show()メソッドを呼び出してから、あなたのレスポンスにprogress.dismiss()メソッドを呼び出してください。

1

これは非常に簡単です。以下のコードは

sendJsonRequest(){ 

    ///ENABLE PROGRESS BAR HERE 
    enableProgressBar();   
    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, URL, null, 

    new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     hideProgressDialog(); 
     System.out.println(response); 
    } 
    }, 
    new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     hideProgressDialog(); 
    } 
    }); 
queue.add(jsObjRequest); 

} 
+0

どのように進歩していますか? –

3

はあなたが要求uはソリューションを手に入れた

  mRequestQueue.add(yourRequest); 
      mRequestQueue.addRequestFinishedListener(new RequestQueue.RequestFinishedListener<String>() { 
       @Override 
       public void onRequestFinished(Request<String> request) { 
        if (progressDialog != null && progressDialog.isShowing()) 
         progressDialog.dismiss(); 
       } 
      }); 
関連する問題