AndroidからADO.NET Data Service(REST)を扱う(データ取得編)
仕事でAndroidを扱う物件が入ってきそうだということで「やっとけ」と。趣味で簡単なアプリは公開してるんである程度の要領はわかってたんですが業務となれば話はまた変わってきますね。という訳でこの機会に調べたことをまとめようかなと。
調べたことはADO.NET Data ServiceでRESTfulに公開している単一テーブルのCRUDです。テーブルはこちら。
よくありがちなマスタテーブルですね。データサービスのURLは下記のとおりです。
- localhost/RestDataService/RestDataService.svc
ただしAndroidから見る場合はlocalhostでは当然見えないので適宜変更してください。データサービスの作成方法はここでは割愛します。例外やら文法やら始めたばっかなのでツッコミどころ満載でしょうがサンプルってことで了承願います。
まずはデータの取得です。今回は条件無しで全件取得してみます。
public void Select() { // URL String mUrl = "http://localhost/RestDataService/RestDataService.svc/M商品マスタ"; // GETメソッド生成 HttpGet getMethod = new HttpGet(mUrl); // ヘッダーを追加 getMethod.setHeader("Accept", "application/json"); getMethod.setHeader("Content-type", "application/json"); // Httpクライアント DefaultHttpClient httpClient = new DefaultHttpClient(); // 応答 HttpResponse retResponse = null; try { // 要求を出して応答を取得する retResponse = httpClient.execute(getMethod); } catch (ClientProtocolException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); return; } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); return; } // 応答からEntity部分を取得 HttpEntity entity = retResponse.getEntity(); try { // Entityを文字列に変換 String json = EntityUtils.toString(entity); // 文字列を元にJSONオブジェクト生成 JSONObject rootObject = new JSONObject(json); // ルート要素からデータ配列を取得 JSONArray DataArray = rootObject.getJSONArray("d"); // 配列数を取得 int count = DataArray.length(); // 配列を回してリストに追加 for (int i=0; i<count; i++){ // アイテムを生成 ItemMasterData itemMasterData = new ItemMasterData(); // JSONオブジェクトから値を設定 itemMasterData.set商品コード(DataArray.getJSONObject(i).getString("商品コード")); itemMasterData.set商品名(DataArray.getJSONObject(i).getString("商品名")); itemMasterData.set金額(DataArray.getJSONObject(i).getInt("金額")); // ログに出力 Log.i("取得データ", itemMasterData.get商品コード() + "," + itemMasterData.get商品名() + "," + itemMasterData.get金額() ); } } catch (JSONException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); return; } catch (ParseException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); return; } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); return; } }
DefaultHttpClientを使用してHttpGetを投げてHttpResponseを取得。そのHttpResponseからHttpEntityを取得しそれをStringを経てJSONObjectに変換するって流れですね。この大まかな流れは追加、更新、削除でもそんなに変わりません。ItemMasterDataクラスはマスタデータを扱うための入れ物として別に定義すると。
ポイントは2つのsetHeaderでしょうか。送るデータと応答にはjsonを使いますよって宣言ですね。これを追加するとADO.NET Data Service側は応答をjsonでしてくれます。以上、データ取得のサンプルでした。