前回、非同期通信を行う為のAsyncTaskについての記事を書いたのですが、
今回はネットワーク通信用ライブラリ:Volleyについての備忘録です。

Google I/O 2013 : Volley: Easy, Fast Networking for Android
公式リポジトリ : https://android.googlesource.com/platform/frameworks/volley/

 

Volleyのライブラリを利用するためには、Gitを使ってプロジェクトを取得し、Androidプロジェクトとしてインポートする必要があります。

 

サーバーに画像をアップロードさせたいので、今回も multipart の場合についてです。

RequestQueue
リクエストを管理するキューは原則として1つだけとのことなので、シングルトンで生成します。
Volley.newRequestQueueの第2引数にHurlStackインスタンスを渡す際にSSLSocketFactoryを指定できるので、デバッグ時にはテスト用のSSLSocketFactoryを指定できます。

<参考>
[Android Developers] Setting Up a RequestQueue
 

Request
Multipart用のRequestクラスです。
サーバーからのレスポンスをJSONで受信するので、JsonRequestクラスを継承しています。

マルチパート形式に対応するためには、以下のライブラリの追加が必要です。
・httpmime-x.x.x.jar
http://hc.apache.org/downloads.cgi ⇒ HttpClient x.x.x (GA) の項目よりダウンロード
(今回私は、httpmime-4.3.3.jarとhttpcore-4.3.2.jarを追加しました。)

※buildMultipartEntity()メソッド内でboundaryの設定を行っていますが(22行目)、
設定が無い場合には MultipartEntityBuilder側でgenerateBoundary()で生成されます。
ただ、何が悪いのかまだ不明ですが、boundaryを設定しないと、サーバー側に渡されるパラメータが不正なものになってしまい、処理が失敗するので、boundaryを設定しています。

 

Multipart用HurlStack
Multipartの場合だけ独自の処理を行うようにしたHurlStakを継承したクラスを作成します。
Out of memoryを避けるために、MultipartRequestクラスでMultipartEntityを返すメソッド(getEntity())を実装し、そのメソッドを使ってMultipartEntityを設定します。

 

リクエスト発行
MultipartRequestを使用したリクエストを発行します。

 

<参考にしたサイト>
・FLY1TKG BLOG 「Volleyでmultipart/form-dataを送信する」

 


Comments are closed.