web-dev-qa-db-ja.com

ボレーとAsyncTask

私はVolleyについての投稿を読みましたが、それが素晴らしいネットワーキングライブラリであることを知っています。しかし、私は一つのことを理解できませんでした。

すべてのリクエストは非同期タスクですか?

Volleyを使用してasyncTaskリクエストを送信する場合、AsyncTaskにVolleyリクエストを配置する必要がありますか?または、既にAsyncTaskリクエストである場合、Volleyリクエストを呼び出す必要がありますか?

 private class MyClass extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
           // do Volley request
        }
}

これは正しいアプローチですか?

44
pmb

AsyncTaskでVolleyリクエストを実行する必要はありません。

なぜ:

これらは、すべてのネットワーク関連タスクを個別のスレッドで管理します。ライブラリプロジェクトをよく見ると、彼らはAsyncTaskを想像していませんでした。ただし、ネットワーク関連のすべてのタスクを効率的に効率的に処理します。

確認RequestQueue.Java Volleyのメインパッケージのクラス

ここでJava doc。

/**
 * A request dispatch queue with a thread pool of dispatchers.
 *
 * Calling {@link #add(Request)} will enqueue the given Request for dispatch,
 * resolving from either cache or network on a worker thread, and then delivering
 * a parsed response on the main thread.
 */

編集済み:

リクエストの作成

Volleyでは、ネットワーク通信はRequestQueueによって管理されます。 RequestQueueとそのすべてのツール、特にキャッシュを利用する最良の方法は、一度インスタンス化して、シングルトンとして保持することです。この時点で、リクエストを追加またはキャンセルしたり、リクエストを停止または開始したり、応答キャッシュにアクセスしたりできます。

RequestQueue queue =Volley.newRequestQueue(this);

RequestQueueがインスタンス化されたら、リクエストを形成する必要があります。これは、Volley Libraryに含まれているいくつかの異なる「すぐに使える」リクエストクラスを利用するか、Volleyのリクエストクラスを独自のカスタムリクエストに拡張することで実行できます。 Volleyにすでに含まれている要求クラスは、文字列要求、JSON要求、および画像要求です。 Volleyライブラリに含まれるほとんどのリクエストクラスは、以下のようなコンストラクタを利用します。

コンストラクターに渡されるパラメーター:

RequestMethod(get、post、delete、ect)JSONObject-リクエストとともに投稿されるオプションのオブジェクトResponseListener-データの送信先リクエストが完了した後ErrorListener –リクエストに問題が発生したときに通知される内容。

JsonObjectRequest request = JsonObjectRequest(Requestmethod, url, null,  new ResponseListener(), new ErrorListener());

応答を受信するリスナー:

成功した応答リスナー

private class ResponseListener implements Response.Listener{
  @Override
  public void onResponse(JSONObject response){

  }
}

エラー応答リスナー

private class ErrorListener implements Response.ErrorListener{
  @Override
  public void onErrorResponse(VolleyError error){

  }
}

最後に、リクエストをリクエストキューに追加します。Volleyが処理するすべてのものの残りです。

電話をかける:

これで、リクエストクラスとレスポンスクラスを作成したので、リクエストをキューに追加してデータを取得する準備ができました。そのためには、リクエストをキューに追加するだけです。

queue.add(request);

レスポンスまたはエラーは、リクエストで定義したレスポンス/エラークラスに配信されます。一度に必要な数のリクエストをキューに追加すると、それぞれのレスポンス/エラークラスにレスポンスが配信されます

59
Gru

Volleyを使用する場合、AsyncTaskと組み合わせる必要はありません。別のスレッドでネットワーク処理を行います。

ここ は、Volleyを使用したネットワークコールの基本的な例です。ご覧のとおり、すべてのコードはActivity内にあり、AsyncTaskを定義する必要はありません。

6
Toon Borgers

ボレーをAsyncTask内に挿入できないのは、

Volleyはそれ自体でバックグラウンドスレッドを開始しているため、すべてのネットワーク要求はUIスレッドから実行されるため、主にAsyncTaskを拡張する必要はありません。もちろん、ローテーション時またはユーザーがアクティビティを終了したときに実行中のリクエストをキャンセルするように注意する必要があります。Volleyは主にAndroidでマイナーなネットワーキング目的で使用されます(DownloadManagerを主に使用)。 AsyncTaskクラスの同様の機能を実行します。ボレーでシングルトンを実装します。ボレーでも画像を送信できます。

1
Chinmai KH

Volleyライブラリを導入する全体のポイントは、ユーザーがネットワーク要求を送信する際に、すべての「明白な」ものを心配する必要がないことを確認することでした。これは、ボレーが独自に次のことを処理することを意味します

  • バックグラウンドスレッドの切り替え
  • 透過的なディスクとメモリの応答
  • 複数の同時ネットワーク接続。等

あなたの質問に答えるために-バックグラウンドスレッドへの切り替えを心配する必要はありません、Volleyは独自にこれを処理します。また、リクエストが完了すると、メインスレッドで成功または失敗のコールバックが呼び出されます。したがって、Volley開発者と一緒にスレッドを切り替えることを心配する必要はありません。

このチュートリアル here は、Volley Libraryの操作について順を追って説明しています。

0
IrshadKumail