よく見てみると、JSONデータ取得でExceptionになっていた。
アプリとしてはWebAPIをたたいてそこから帰ってくるJSONデータを加工してListViewに表示するもの。そのListViewに表示する際のJSON形式がいつのまにやら変わっていたのが原因っぽい。(連絡してよ~)
で、修正しようと思ったけど久々にAndroid触ったこともあって、手間取ったので一応まとめておく。
◆JSONObject
JSONデータを扱うためのクラス。コンストラクタにJSONデータを渡すことで、
getJsonString()等のメソッドでデータを取得できる。
◆JSONArray
JSONデータのArray形式のデータを取得できるクラス。コンストラクタにJSONのArray形式の
データを渡すことで、getJSONObject()等のメソッドでJSONObjectクラスを取得しそこから
データを取得していく。
■変更前
今までは、JSONArrayでデータを渡すことでデータを取得できていた。
<データ形式>
[{"key":"01","name":"sakura"},{"key":"01","name":"sakura"}]
<ソース>
JSONArray coupon = new JSONArray(data);
int len = coupon.length();
for(i=0;i<=len;i++){
JSONObject jCoupon = coupon.getJSONObject(i);
ResponseDataCoupon rd = new ResponseDataCoupon(jCoupon);
ListItem tmpItem = new ListItem(rd);
list.add(tmpItem);
}
しかし、形式が変わったため、以下のように一旦JSONObectからkey値を取得し、それからその
キー値でgetJSONObjectを指定することでJSONデータの各レコードを取得するように変更した。
■変更後
<データ形式>
JSONObject obj = new JSONObject(data);
Iterator it = obj.keys();
while(it.hasNext()){
JSONObject jCoupon = obj.getJSONObject((String)it.next());
ResponseDataCoupon rd = new ResponseDataCoupon(jCoupon);
ListItem tmpItem = new ListItem(rd);
list.add(tmpItem);
}
ふー。そろそろAndroid再開じゃ。