2014年1月11日土曜日

[android][Java]雑談対話

docomo Developer support様の雑談対話APIを使ったandroidアプリケーションを作ってみました。
雑談対話APIはHttpPostを使う必要があります。
これまでHttpGetを使うWeb APIはいくつか使ったことがあったのですが、HttpPostはあまり経験がなくて苦戦してしまいました。
なんとかできましたので、その時のメモを残しておきます。
苦戦したポイントは……(いやーお恥ずかしい)
  • <uses-permission android:name="android.permission.INTERNET" />を忘れずに
  • JSON形式でリクエストを送らないといけないことになかなか気づかなかったこと
  • StringEntityのコンストラクタで第2引数 "UTF-8"が必要だったこと(機種依存なのかも? しれません)

参考にさせていただいたサイト様です。

HttpPostリクエストを実行して、HttpResponseを得るところまでのソースです。
AsyncTask#doInBackground()等main threadではないThreadで動作するように実装すればよいかとおもいます。
DefaultHttpClient httpclient = new DefaultHttpClient();
final String APIKEY = "ご自身のAPIKEYをお使いください";
HttpPost post = new HttpPost("https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=" + APIKEY);
JSONObject json = new JSONObject();
try {
    json.put("utt", "こんにちは");
    StringEntity body = new StringEntity(json.toString(), "UTF-8"); /** LYNX 3D SH-03Cは第2引数"UTF-8"が必要でした。 */
    //post.addHeader("Content-Type", "application/json"); /** 雑談対話APIでは設定をしなくてもよいようです。 */
    post.setEntity(body);
    HttpResponse response = httpclient.execute(post);
    int statusCode = response.getStatusLine().getStatusCode();
    if (statusCode == HttpStatus.SC_OK) {
        HttpEntity entity = response.getEntity();
        String jsonTxt = EntityUtils.toString(entity, "UTF-8");
        JSONObject response_json = new JSONObject(jsonTxt);
        /** レスポンスの取り出し */
        String utt = response_json.getString("utt");
        String yomi = response_json.getString("yomi");
        String mode = response_json.getString("mode");
        String da = response_json.getString("da");
        String context = response_json.getString("context");
    }
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (JSONException e) {
}

2014年1月1日水曜日

[android]NFC

あけましておめでとうございます。
今年もよろしくお願いします。

ABC 2013 Autumnに行ったときに記念に買ったNFCタグ(100円)に情報を書き込んでみたくなりました。
秋に買ったときは対応端末を何も持っていなかったので、ずっと引き出しの奥に眠ったままになっていました。
 ↑↑↑
こんなやつです。

Nexus 5を買ったのでかざしてみました。
「なにも書き込まれていません」みたいな表示がされました。

何か書き込んでみたくなりました。
http://developer.android.com/guide/topics/connectivity/nfc/index.html
を読んでいろいろやってみましたが、できませんでした……

http://www.ntts.co.jp/publish/column/tec/mobile_04/index.html
わかりやすく解説してくださっているページがありましたので、そのとおりにやるとできました。
URL情報がNFCタグに書き込まれて、かざすとそのページがブラウザで開けるようになりました。

もう一回公式の内容を読み返してみたいとおもいます。
今度は話がつながってくるような気がします。


追伸
Nexus 5いいです。Google Playで買いました。
ビックカメラSIM(SMS)との組み合わせが一番いいんじゃないでしょうか。


追伸2
『インフラエンジニアの教科書』をある人からススメられて読みました。
いろいろ勉強せんといかんですね。