Webアプリケーション
Webアプリ側は、手っ取り早く Ruby On Railsで作成。(Railsのヴァージョンは、2.3.8を入れてあるので、databaseのdefaultは、sqlite3)
Webアプリのイメージは、在庫管理用の商品コードの保管と表示。モデルは、在庫Stock。StockをiPhone側から扱うコントローラは、Apiと言う名前にした。
$ rails testapp $ cd testapp $ script/generate model Stock $ script/generate controller Api index
"Stock" modelのmigrationの中身は、以下の感じ
create_table :stocks do |t| t.string :name # 商品名 今回は、無用。 t.string :code # 商品コード t.timestamps end
controllerの中身は、WebAPI的なのりで作成してみた。APIの仕様?は以下の通り。
http://hogehoge/api/ --- 全てをjson形式で提供(表示) http://hogehoge/api/show/code_no --- コード = code_no のstockをjsonで提供 http://hogehoge/api/upload/code_no --- 新しいデータを登録 code = code_no
例外処理とか未だ入れてないので、エラー頻発だ。
class ApiController < ApplicationController
# 全て表示のアクション
def index
@stocks = Stock.all
# レスポンスは、jsonにフォーマットして出力
respond_to do |format|
format.json { render :json => @stocks, :callback => params[:callback] }
end
end
# 商品コードを指定して出力
def show
@stock = Stock.find_by_code(params[:id])
respond_to do |format|
format.json { render :json => @stock, :callback => params[:callback] }
end
end
# 今回の主役。商品コードを受け取り、データベースに保管する
# レスポンスは、textにした
def upload
message = 'Upload Error'
if params[:id] && stock = Stock.new({:code => params[:id]})
message = 'Save New Code :' + stock.code if stock.save
end
render :text => message
end
end
これで、script/server でテストサーバを起動。
http://hogehoge:3000/api/ を試してみた。確かにjson形式で出力されている。
Titunium側のプログラム(一部)
さて、Tituniumアプリ側の該当部分。HTTPClientオブジェクトを操作する。var win = Ti.UI.currentWindow;
var sendButton = Ti.UI.createButton({
title:'Send Data',
top:200,
left:10,
width:300,
height:100
});
win.add(sendButton);
// sendボタンのclickイベントを記述
sendButton.addEventListener('click', function(){
// HTTPClientオブジェクトを用意
var xhr = Ti.Network.createHTTPClient();
xhr.timeout = 1000000;
var sample = '12345'; // サンプルデータ
var url = 'http://hogehoge:3000/api/upload/' + sample;
xhr.open('GET',url);
// ロードされた場合の処理を記述。
// ここではレスポンスを受け取ってダイアログボタンに結果を返すと定義。
xhr.onload = function(){
var res = this.responseText;
Ti.UI.createAlertDialog({
title: 'Send Data',
message: res
}).show();
};
// リクエストを送信する。レスポンスが帰ったときに、onloadアクションとなる。
xhr.send();
});
iPhoneアプリをエミュレータで起動。[send]ボタンを押すと、サーバアプリにサンプルデータが送信され、その結果がモーダルボタンで表示される。
気になったこと
- ボタンイベントに変数(この場合はデータ)を渡す方法
- HTTPClientの接続失敗の処理方法
- send()のタイミングは、正しいか?


0 件のコメント:
コメントを投稿