fly1tkg blog

JsonPullParserのJsonModelを取得するVolleyのRequestをつくってみた

JsonPullParserのJsonModelを取得するVolleyのRequestをつくってみました。

Volleyとは?

Google I/O 2013で発表されたすごいAndroidの通信ライブラリ。どうすごいかは以下のリンクが参考になります。

Google I/O 2013 – Volley: Easy, Fast Networking for Android

Y.A.Mの雑記帳: Google I/O 2013 – Volley: Easy, Fast Networking for Android

JsonPullParserとは?

JSONとPOJOを相互変換するライブラリです。APTの仕組みを利用しています。

https://github.com/vvakame/JsonPullParser

つくったもの

https://github.com/fly1tkg/volley-jpp-request

使い方

Volleyと上記のレポジトリのjarにパスをとおして、あとはこんな感じです。

mQueueRequest = Volley.newRequestQueue(this);
mQueueRequest.add(new JsonModelRequest<Sample, SampleGen>(JSON_URL, new Listener<Sample>() {
    @Override
    public void onResponse(Sample sample) {
        mJsonTextView.setText(sample.toString());
    }
}, new ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        error.printStackTrace();
    }
}));

パフォーマンスとか

このライブラリは内部でリフレクションを利用しているので、若干パフォーマンスが悪いです。(気になるレベルでは無いと思いますが)

リフレクションを利用した理由としてJPPでinterfaceのimplementやクラス継承が使われておらず、Genクラスのget(string json)メソッドを呼び出しつつ、ジェネリクスを利用した柔軟なクラスを作れなかったからです。JPPのアプローチから言うと、おそらくマーカーアノテーションで指定したJsonModelに対して、VolleyのRequestをAPTで生成するというアプローチがよいと思うのですが、、、、めんどくさかったんです、、、。

ジェネリクスからリフレクションを利用する方法として、黒魔術ですが、Java変態文法最速マスターの4を利用しました。