1. ホーム
  2. Android開発

Androidネットワークフレームワーク Volley

2022-02-26 06:08:36
ボレー は、Google I/O2013で紹介されたネットワーク通信ライブラリです。volleyが導入される前は、一般的に、より成熟したサードパーティのネットワーク通信ライブラリ、例えば

彼らは彼らの利点と欠点を持って、私はandroid - async - httpを使用することを好む前に、現在Googleは、ネットワーク通信をより速く、よりシンプルで堅牢にすることができますAndroidプラットフォーム用の公式ネットワーク通信ライブラリを立ち上げました、Volleyは高性能のネットワーク通信機能を提供しながら、ネットワーク画像のロードのための良いサポートを提供し、完全にできる理由 我々はシンプルRESTクライアントへの傾向を維持できない理由はないでしょう

ボレーを使う

Volley のソースコードをダウンロードし、jar パッケージをビルドします。

$ git clone https://android.googlesource.com/platform/frameworks/volley
$ cd volley
$ android update project -p
$ ant jar


生成されたjarパッケージはプロジェクト内で参照され、extrasディレクトリには最新のvolleyのソースコードが格納されます。

説明

このデモでは、日常のWeb開発でよく使われる基本的な機能に焦点を当てていますが、volleyは非常に拡張性が高く、必要に応じて独自のWebリクエストにカスタマイズすることが可能です。

volleyの動画は以下の場所にあります。 http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded


<スパン 上記は、Google IOの発表会でのパワーポイントからの添付画像です。 この上の図から、volleyは高速でシンプルなリクエスト(Jsonオブジェクト、画像読み込み)に向いていることがわかります。

volleyの特徴。

  • JSON、画像などの非同期ダウンロード。
  • Webリクエストの振り分け(スケジューリング)
  • ネットワークリクエストの優先順位付け
  • キャッシング
  • リクエストの多段階キャンセル
  • アクティビティ、ライフサイクルとの連動(アクティビティ終了と同時に全てのネットワークリクエストをキャンセル)

次に、volleyがくれたAPIをシンプルに使えるようになりましょう。

1. まずリクエストキューを取得します(RequestQueueは、使用するたびに新しいインスタンスを必要とするAsyncTaskとは異なり、1つのインスタンスしか必要としません)。

  1. // RequestQueue を初期化します。アクティビティは 1 つだけ必要です。
  2. プライベート ボイド  initRequestQueue() { {  
  3.         mQueue = Volley.newRequestQueue(getApplicationContext())。  
  4.     }  

2. volleyの非同期リクエストクラス(JsonObjectRequest、JsonArrayRequest、StringRequest、ImageRequest)を実装する。 )

使い方はあまり変わらないので、例は挙げず、よくある代表的なものをいくつか紹介します。

次のようなコードです。 のStringRequestです。 getリクエストに対応します。

  1. // 取得要求
  1. プライベート ボイド  loadGetStr(String url) { {  
  2. <スパン
  3.     StringRequest srReq = (ストリングリクエスト)  新しい  StringRequest(Request.Method.GET, url,  
  4. 新しい  StrListener()を使用します。  新しい  StrErrListener()) { {  
  5. <スパン
  6. <スパン プロテクト 最終  文字列 TYPE_UTF8_CHARSET = (日本語)  charset=UTF-8"。 ;  
  7. <スパン // parseNetworkResponse メソッドを書き換えて、戻り値のヘッダーパラメーターを変更し、コードの文字化けの問題を解決します。
  8. // サーバーのエンコーディングが UTF-8 でない場合は自分で変換する必要がありますが、そうでない場合は変換する必要はありません。
  9. オーバーライド
  10. プロテクト  レスポンス<String> parseNetworkResponse()  
  11.                 NetworkResponseレスポンス) { {  
  12. トライ  {  
  13.                 String type = response.headers.get(HTTP.CONTENT_TYPE);  
  14. もし  (タイプ ==  ヌル ) {  
  15.                     type = TYPE_UTF8_CHARSET です。  
  16.                     response.headers.put(HTTP.CONTTENT_TYPE, type)を実行します。  
  17.                 }  さもなければ もし  (!type.contains() "UTF-8" )) {  
  18.                     タイプ +=  ";"  + type_utf8_charset;  
  19.                     response.headers.put(HTTP.CONTTENT_TYPE, type)を実行します。  
  20.                 }  
  21.             }  キャッチ  (例外e) {  
  22.             }  
  23. 戻る スーパー .parseNetworkResponse(response);  
  24.         }  
  25.     };  
  26.     srReq.setShouldCache() );  // キャッシュするかどうかを制御する
  27.     startVolley(srReq)を実行します。  
  28. }  

次のようなコードです。 JsonObjectRequest 投稿の リクエストに対応します。
  1. // ポストリクエスト
  2. プライベート ボイド  loadPostJson(String url) {.  
  3. // 2番目のパラメータの説明。
  4. // jsonRequestがNULLの場合はGET、POSTをデフォルトとするコンストラクタです。
  5. // そうでない場合は
  6. // get メソッドの場合はデフォルトで null、それ以外の場合は post メソッドに設定されます。
  7.     JsonObjectRequest srReq =。  新しい  JsonObjectRequest(url,  ヌル ,  
  8. 新しい  JsonListener()を使用します。  新しい  StrErrListener()) { {  
  9. <スパン
  10. <スパン オーバーライド
  11. プロテクト  Map<String, String> getParams()  投げる  AuthFailureError {  
  12.             Map<String, String> map =  新しい  HashMap<String, String>()を使用します。  
  13.             map.put( w" <スパン 2459115"。 );  
  14.             map.put( "u" <スパン f" "です。 );  
  15. 戻る  マップを作成します。  
  16.         }  
  17.     };  
  18.     srReq.setShouldCache() false );  // キャッシュするかどうかを制御する
  19.     startVolley(srReq)を実行します。  
  20. }  

<スパン 注意すると、どちらか JsonObjectReques の postt と StringRequest の get は、成功時と失敗時のふたつのリスナー関数を渡す必要があり、成功時のリスナーは対応するデータ型: JsonObjectReques を返します。

<スパン <スパン

  1. // Str リクエスト成功コールバック
  2. プライベート クラス  StrListener  インプリメント  リスナー<ストリング> {  
  3. <スパン
  4. <スパン オーバーライド
  5. 公開 ボイド  onResponse(String arg0) { {  
  6.         Log.e(Tag, arg0);  
  7.     }  
  8. }  
  9. <スパン // Gsonリクエスト成功コールバック
  10. プライベート クラス  GsonListener  インプリメント  リスナー<ErrorRsp> { {  
  11. <スパン オーバーライド
  12. 公開