JSONArray な Adapter
とりあえず、サーバ側の実装を upload したんで Android 側のソレを検討。OSX な端末で作業せざるを得ないあたりが微妙杉。Thinkpad 欲しいよう。
む
職場に Ubuntu な端末があるな。これを使えばええのか。
で
ちょいメモを控えときます。
- fetchAll とか fetch は JSONArray を戻せば良い模様
- JSONObject から一カワ剥いだ方が良いに違いないとゆー事で
- AppEngineClient (chorome2phone のソレ) は POST 前提
- なので GAE 側を修正
- レスポンスな文字列を JSONObject にして、そこから getJSONArray する必要あり
- 単発の場合は 'item' で getJSONArray で複数の場合は 'List' で getJSONArray
- サーバの仕様てきには戻りは以下
- 単発だと {'item' : [{'id' : 1, 'text' : "aaa"}]}
- 複数だと {'List' : [{'id' : 1, 'text' : "aaa"}, {'id' : 2, 'text' : "bbb"}]}
実装
抽象化云々が微妙なのでとりあえず NoteDBAdapter に載せます。例えば fetchAllNotes だとどうなるのかな。
public JSONArray fetchAllNotes() throws Exception { return makeRequest(mCtx, "/list"); }
この makeRequest は以下な定義?
private static HttpResponse makeRequest(Context context, String urlPath) throws Exception { SharedPreferences settings = Prefs.get(context); String accountName = settings.getString("accountName", null); AppEngineClient client = new AppEngineClient(context, accountName); return client.makeRequest(urlPath, null); }
なんか SharedPreferences にアカウントなソレを盛り込まんといかん模様。しかも起動時だかに設定作成済みかとか確認しないと駄目ぽ。
試験する時は文字列リテラルでゲルニな方向で。ってそのまんま戻しちゃ駄目なんだった。ええと
HttpResponse r = client.makeRequest(urlPath, null); if (r.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity httpEntity = r.getEntity(); final InputStream in = httpEntity.getContent(); br = new BufferedReader(new InputStreamReader(in)); String str; while((str = br.readLine()) != null) { sb.append(str); } jsons = new JSONObject(sb.toString()); return jsons.getJSONArray("List"); } return null;
みたいなカンジで良いのかどうか。動作確認は明日ってコトで。