Amazon

ラベル Tips の投稿を表示しています。 すべての投稿を表示
ラベル Tips の投稿を表示しています。 すべての投稿を表示

2012年5月19日土曜日

TitaniumでSQLiteを使う際のキホン

TitaniumでSQLiteを使う際の良く使うものをまとめておきます

○データベースの作成

var db = Titanium.Database.open('db_name'); // db_name は任意のデータベース名

○データベースのパス確認
Titanium.API.info('DB PATH : ' + db.file.getNativePath()); // file://localhost/Users/〜省略〜/xxx 
Titanium.API.info('DB PATH : ' + db.file.resolve()); // /Users/〜省略〜/xxx

○データベースの削除
db.execute('DELETE FROM db_name');

○データの確認
~/Library/Application Support/iPhone Simulator/User/Application/アプリ別のディレクトリ/Library/Application Support/database/
の下に、db名.sql の名称で保存されている。

○ あるテーブルが存在するかを確認して、存在しなければテーブルを初期化する
var dbName = 'dbname';
var db = Titanium.Database.open(dbName);
var existTable = db.execute('select count(*) from sqlite_master where type=\'table\' and name=\'TABLENAME\'');
var count = existTable.field(0);
if(count == 0) {
  Ti.include('./initDB.js');
  db = dbInit(db);
}


○Insert処理を早めるためのコツ
db.execute('BEGIN');//トランザクション開始
Insert処理
db.execute('COMMIT');//コミット

2011年3月9日水曜日

OpenSocialにおけるアプリの縦幅の自動調整

mixiデベロッパーサイトより

縦幅の自動調整

mixiアプリが表示するコンテンツは様々です。使える横幅は固定ですが、縦幅については可変となります。この際、mixiアプリが表示したコンテンツに従って最適な縦幅に自動的に調整がかかると非常に便利です。

OpenSocialでは、縦幅の自動調整を行うための関数が提供されています。gadgets.window.adjustHeight()関数を使うことで、縦幅の自動調整を行うことができます。この関数を利用するためには、dynamic-height機能を有効にする必要があります。







dynamic-height機能の利用宣言をタグを使って記述します。これにより、以下のようにしてadjustHeight()関数が使えるようになります。

// do something
gadgets.window.adjustHeight();

adjustHeight()関数の呼び出し直後に、領域の大きさが変更される点に注意します。例えば、mixiアプリの起動時に領域調整を adjustHeight()関数で行いたい場合は、画像や文字列など、通信やDOM操作を一通り終えた後にadjustHeight()関数を呼び出すようにすればよいでしょう。



これで基本は高さが自動調整になるけど、特定の高さにしたければこちらを参照

2011年2月27日日曜日

JavaScriptの非同期通信でハマる。

OpenSocialアプリ開発においてJavaScriptでの非同期通信をよく理解していなかったのでハマった。

例えば

initializeData(){
initializeMyInfo()
initializeFrinedInfo()
setInfo()
}
という初期化メソッドがあるとする。
ここでinitializeMyInfo()は自分の情報を, initializeFriendInfo()は自分の友達の情報を
req = opensocial.newDataRequest()
で取得してくるとする。
そしてsetInfo()では取得したそれぞれ自分の情報、友達の情報を加工するとする。


ここで問題が発生する。
initializeData()はinitalizeMyInfo()->initializeFriendInfo()->setInfo()というシーケンシャルに呼び出されるので通常はinitializeMyInfo()、initializeFriendInfo()で確実にデータが取得できてsetInfo()が実行されるはずだ。
しかし、req = opensocial.newDataRequest()でデータを取得するのは非同期通信なので、setInfo()が呼び出されるタイミングで、initializeMyInfo()およびinitializeFriendInfo()がデータを取得できているかは保証がない。

非同期通信が裏目に出る結果となる。

仕方ないので、それぞれのrequestのコールバック関数内でシーケンシャルにメソッドを呼ぶことで回避する。JavaScript1.7からyeild()というメソッドで非同期通信を同期通信にすることができるようだけど、今回は時間がないのでとりあえずこれで。

initializeMyInfo(){
req = opensocial.newDataRequest()
req.send(function(response){
...
initializeFriendInfo()
});

initializeFriendInfo(){

req = opensocial.newDataRequest()
req.send(function(response){
...
setInfo()

});

あんまりキレイじゃないなぁ。。。

Amazon3