なんかやたらみかけます。
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アクセスぢゃないと、あまり良さゎ分からなかったりします。
Related Categories : Android・apps・Developmemt・Libraries・Tools・google gson・open weather map・volley



You must be logged in to post a comment.