メモ:androidアプリ内からjsonicを使ったサーブレットとJSONなやり取り

サーブレット

  • eclipseのindigo。wtp系。
  • Serverのランタイムを設定する。Server の Runtime Environments に Tomcatの6やら7やら設定。(ランタイムはServerを作る途中でも設定できる)ランタイムに設定するTomcatは、zip解凍したてのまっさらなやつなどが良い。Serverはここにあるxmlなどをコピーしてきてしまうので。
  • Serverを作る。File → New から Serverを作ってTomcatの6やら7やらにして1こ作る
  • webアプリを作る。File → New から Dynamic Web Project で「myweb」とか。
  • サーブレットを作る。適当なパッケージを作り、適当な名前のサーブレット HelloServlet を作る。web.xmlへのマッピング 例えば /hello を忘れずに。
  • jsonicのサイトかダウンロードしてきて、WEB-INF/libに、jsonicのjarをこぴぺする。
  • 適当なパッケージに、POJOなクラス Hoge を作る。String msg に getter/setterぐらいの。
  • 作ったサーブレットのdoGetを書く。
Hoge hoge = new Hoge();

// オブジェクトにきた値をいれる
hoge.setMsg(request.getParameter("msg"));
// jsonic使ってjsonにする
String jsonObject = JSON.encode(hoge);

response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.print(jsonObject);
out.flush();
{"msg":null}

Servierの起動は「Servers」のviewを表示してそこからぽちるようにしている。

android

  • Androidのアプリをつくる
  • 画面はtextviewが1こあればよし
  • フォルダ「lib」など作って、jsonicのjarをこぴぺする
  • プロジェクトのビルドパスの設定に、追加したjsonicのjarを追加する
    • jarの追加はこんな風にやるのが正しいかは不明。
Uri.Builder builder = new Uri.Builder();
builder.scheme("http");
builder.encodedAuthority("10.0.2.2:8080");
builder.path("/myweb/hello");
builder.appendQueryParameter("msg", "hello world!!");

ローカルのTomcatにアクセスというと、127.0.0.1:8080/webappname なのだけど、androidからの場合は、ローカルホストのアドレスが「10.0.2.2」らしい!。ちょーびっくりしたー! ポート番号は続けて書いてみたらうまくいったが、他の書き方があるかは不明。appendQueryParameter で 「msg」をキーに「hello world!!」をいれておく。


結果となる String result はjsonicを使ってデコードしてみる。そのためには、mywebのほうの「Hoge」クラスを、コピーしてandroidのプロジェクトにも持ってきておくか、内容が同じものを作る。

// JSONでデコード
Hoge hoge = JSON.decode(result, Hoge.class);

// textviewはTextView
// オブジェクトのメソッドで値を取り出してセットする
textview.setText(hoge.getMsg());


もっと項目を増やすとか、配列にするとかすると、それっぽくなるかも