なんかやたらみかけます。
HTTPクライアントライブラリの「volley」。
なんかかんたんらしいのでやってみた。
あと、JSONパーサの「Google Gson」てのも使ってね。
お題的には、無料公開の「Open Weather Map API」ての。
こんなレスポンスを返します。
{"coord":{"lon":139,"lat":35}, "sys":{"country":"JP","sunrise":1370806166,"sunset":1370858254}, "weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}], "base":"global stations", "main":{"temp":289.26,"humidity":61,"pressure":1012,"temp_min":289.26,"temp_max":289.26}, "wind":{"speed":3.91,"deg":105.003}, "clouds":{"all":88}, "dt":1370851210, "id":1851632, "name":"Shuzenji", "cod":200}
調べると画像も取得できるのだと。
OpenWeatherMap JSON API v2.1(Androidからの利用方法メモ)
Google Gson
パースは、2行+モデルクラスででける。
https://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/src/com/google/gson/examples/android/GsonProguardExampleActivity.java
... Gson gson = new Gson(); ... sb.append("Cart Object: ").append(gson.fromJson(json, Cart.class)).append("\n"); ...
注意するのは以下2点。
一層目に配列が返ってくるときは、Type(コレクション)で。
オブジェクトの中の配列は、List型に入れてくる。
Gsonの使い方(JSONをJava Objectsに変換)
http://eikatou.net/blog/2012/02/gson-deserialize/
モデルクラスをつくるとき、Android Studioなら以下TIPSが使えます。
エディターで⌘N (Code | Generate)を使えば、クラスのフィールドのゲッターとセッターを簡単に生成できます。
AndroidStudioのTip of the Dayを翻訳してたけど途中で飽きた
volley
かんたんに非同期で取得。
まずHTTPリクエストを行うQueueを作ります。
mQueue = Volley.newRequestQueue(context);
あとはリクエストを投げます。
request = new JsonObjectRequest(Method.GET, rul, null, new Listener<JSONObject>() { public void onResponse(JSONObject jsonRoot) { List<Item> items = parseJson(jsonRoot); appendItemToList(items); } }); mQueue.add(request);
Volley(AndroidのHTTP通信ライブラ)を使おう
http://www.adamrocker.com/blog/341/volley-easy-fast-networking-for-android.html
で、ついでにリクエストヘッダとかどうやるのか。
Volleyでhttp headerを追加設定する
http://qiita.com/items/be00bc7f3f7e03d1c4c0
何をするにもシンプルです。
gson + volley て
実際、volleyからは、JSONをオブジェクトとして受け取れるよう。
これってパーサーとかいらねんぢゃね?
と思いつつも、volley + gson で github を探すとこんなの。
public class GsonRequest<T> extends Request<T> { private final Gson gson = new Gson(); private final Class<T> clazz; private final Map<String, String> headers; private final Listener<T> listener; /** * Make a GET request and return a parsed object from JSON. * * @param url URL of the request to make * @param clazz Relevant class object, for Gson's reflection * @param headers Map of request headers */ public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.clazz = clazz; this.headers = headers; this.listener = listener; } @Override public Map<String, String> getHeaders() throws AuthFailureError { return headers != null ? headers : super.getHeaders(); } @Override protected void deliverResponse(T response) { listener.onResponse(response); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success( gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } }
https://gist.github.com/ficusk/5474673
とかあれこれやってるとこんな。
もっと、画像とか連続HTTPアクセスぢゃないと、あまり良さゎ分からなかったりします。
関連ワード: Android・アプリ・ツール・ライブラリ・開発・google gson・open weather map・volley
コメントを投稿するにはログインしてください。