· Android Volley

Androidプロジェクトを新規作成してVolleyが使えるようになるまで

  • このエントリーをはてなブックマークに追加

サンプルプロジェクトは、githubにおきました。

Androidプロジェクトを新規作成する

Android StudioでNew Projectを作成する (例プロジェクト名:VolleySample)

volleyプロジェクトを追加する

volleyプロジェクトを作成したAndroidプロジェクトにsubmoduleとして追加・設定する

1.作成したプロジェクトに移動してgit init

$ cd VolleySample
$ git init

2.必要なら.gitignoreに追加してコミット 3.volleyプロジェクトを追加する

$ git submodule add https://android.googlesource.com/platform/frameworks/volley modules/volley
$ git diff --cached
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "modules/volley"]
+       path = modules/volley
+       url = https://android.googlesource.com/platform/frameworks/volley

--- /dev/null
+++ b/volley
@@ -0,0 +1 @@
+Subproject commit 0e406xxxxxxxx

4.setting.gradleに、volleyプロジェクト追加した時のパスを追加する

$ git diff
— a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ‘:app’
+include ‘:app’,’:modules:volley’

5.volleyを使いたいプロジェクトにvolleyの依存設定を追加

$ git diff
— a/app/build.gradle
+++ b/app/build.gradle
@@ -21,4 +21,5 @@ android {
 dependencies {
     compile fileTree(dir: ‘libs’, include: [’*.jar’])
+    compile project(’:modules:volley’)
 }

6.以下はvolleyがアップデートされるまでに必要な対応

volleyの SDK build tools revisionを19.1.0に修正する

本来は上記の依存設定まででいいはずだが、それだけだと下記のエラーが出るので仕方がなさそう

Error:The SDK Build Tools revision (19.0.0) is too low for project ':modules:volley'. Minimum required is 19.1.0

Volleyを使ってみる

この記事 Android working with Volley Library を参考にvolleyを使ってみます。

この記事は簡単に言うと、Applicationを継承したシングルトンクラスを使うといい感じに使えるよって感じです。

まずApplicationを継承したAppControllerを作成します

ここでは画像は扱っていません。

AndroidManifest.xmlに追記

アプリが起動すると自動的に起動させるように、AndroidManifest.xmlにシングルトンクラスを追記します。あと、ネットワークを使用しますので、INTERNET権限を追加します。

$ git diff
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,9 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="net.kwmt27.volleysample" >
 
+    <uses-permission android:name="android.permission.INTERNET" />
     <application
+        android:name="net.kwmt27.volleysample.app.AppController"
         android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
         android:label="@string/app_name"

実際に使ってみます

適当にMainActivityonCreate()に適当なリクエストをなげて、レスポンスを確認します。

@Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
+
+        request();
+    }
+
+    private void request() {
+        // Tag used to cancel the request
+        String tag_json_obj = "json_obj_req";
+
+        String url = "http://api.androidhive.info/volley/person_object.json";
+
+        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
+                url, null,
+                new Response.Listener<JSONObject>() {
+
+                    @Override
+                    public void onResponse(JSONObject response) {
+                        Log.d(TAG, response.toString());
+
+                    }
+                }, new Response.ErrorListener() {
+
+            @Override
+            public void onErrorResponse(VolleyError error) {
+                VolleyLog.d(TAG, "Error: " + error.getMessage());
+            }
+        });
+
+        // Adding request to request queue
+        AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
     }

あとはビルド・起動して確認

D/MainActivity﹕ {"email":"ravi8x@gmail.com","phone":{"home":"08947 000000","mobile":"9999999999"},"name":"Ravi Tamada"}

こんな感じでlogcatに出ていれば使えています。

エラーハンドリング

先ほどのrequestメソッドに書いてますが、正常にレスポンスが返ってくればonResponseが呼ばれます。では、エラーの場合はどうなるのか?それはonErrorResponseが呼ばれます。上記のコードでは、ログ出力しているだけですが、エラーハンドリングする必要が出てくると思います。その時は、下記のようにして、それぞれに対応する処理を書いてあげれば良いです。

if( error instanceof NetworkError) {
    } else if( error instanceof ClientError) {
    } else if( error instanceof ServerError) {
    } else if( error instanceof AuthFailureError) {
    } else if( error instanceof ParseError) {
    } else if( error instanceof NoConnectionError) {
    } else if( error instanceof TimeoutError) {
    }

参考

Android Studio で Volley を使う – ひだまりソケットは壊れない

Volleyを使うのがかなり簡単になってた – Islands in the byte stream

Git submodule の基礎 – Qiita

Git diff says subproject is dirty – Stack Overflow

Android working with Volley Library

Android: How handle message error from the server using Volley? – Stack Overflow

  • このエントリーをはてなブックマークに追加
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket