AndroidからADO.NET Data Service(REST)を扱う(データ追加編)

AndroidからRESTfulなADO.NET Data Serviceへのデータの追加です。前と同じテーブルを使います。

public void Add() {

	// 追加するデータ
	ItemMasterData newItemMasterData = new ItemMasterData();
	newItemMasterData.set商品コード("100");
	newItemMasterData.set商品名("商品100");
	newItemMasterData.set金額(500);

	// データをJSONObjectに変換
	JSONObject AddJsonObj = new JSONObject();
	try {

		// Uri、Typeを生成
		JSONObject jsonMeta = new JSONObject();
		jsonMeta.put("Uri", "/M商品マスタ/");
		jsonMeta.put("Type", "RestDataService.M商品マスタ");
		// Uri、Typeを設定
		AddJsonObj.put("__metadata", jsonMeta);

		// データを設定
		AddJsonObj.put("商品コード", newItemMasterData.get商品コード());
		AddJsonObj.put("商品名", newItemMasterData.get商品名());
		AddJsonObj.put("金額", newItemMasterData.get金額());

		Log.i("送信データ", AddJsonObj.toString(4));

	} catch (JSONException e) {
		// TODO 自動生成された catch ブロック
		e.printStackTrace();
	}

	// URL
	String mUrl = "http://locallhost/RestDataService/RestDataService.svc/M商品マスタ";

	// POSTメソッド生成
	HttpPost postMethod = new HttpPost(mUrl);
	// ヘッダーを追加
	postMethod.setHeader("Accept", "application/json");
	postMethod.setHeader("Content-type", "application/json");

	// 追加データをメソッドに設定
	try {
		postMethod.setEntity(new StringEntity(AddJsonObj.toString(), "UTF8"));
	} catch (UnsupportedEncodingException e1) {
		// TODO 自動生成された catch ブロック
		e1.printStackTrace();
	}

	// Httpクライアント
	DefaultHttpClient httpClient = new DefaultHttpClient();
	// 応答
	HttpResponse retResponse = null;
	try {
		// 要求を出して応答を取得する
		retResponse = httpClient.execute(postMethod);
	} catch (ClientProtocolException e) {
		// TODO 自動生成された catch ブロック
		e.printStackTrace();
		return;
	} catch (IOException e) {
		// TODO 自動生成された catch ブロック
		e.printStackTrace();
		return;
	}

	// 結果を表示
	Log.i("データ追加", "ステータス: " + String.valueOf(retResponse.getStatusLine().getStatusCode()));

}

追加するデータをJSONObjectにするわけですが構造にちょっと気を付けなければいけません。

{
    "__metadata": {
        "Uri": "/M商品マスタ/",
        "Type": "RestDataService.M商品マスタ"
    },
    "商品コード": "100",
    "商品名": "商品100",
    "金額": 500
}

送信するデータの構造は__metadataはUriとTypeで構成されており、Uriにはマスタ名、Typeにはデータサービス側での型を指定します。そのあとはテーブルの項目名と値が並びます。これをPOSTメソッドのEntityにセットして送信し、成功時のステータスは201が帰ってきます。以上、データ追加のサンプルでした。