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;

みたいなカンジで良いのかどうか。動作確認は明日ってコトで。