dbを読み込む

作成済みのdbを読み込む話

$ sqlite3 sample.db
SQLite version 3.7.7 2011-06-25 16:35:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test(id integer, title text);
sqlite> insert into test values(1, 'aaa');
sqlite> insert into test values(2, 'bbb');
sqlite> insert into test values(3, 'ccc');
sqlite> .quit
  • AIR for iOS設定」の含めるファイルから作成したDBを設定


  • ライブラリのインポート
import flash.filesystem.*;
import flash.data.*;
import flash.events.SQLEvent;
  • SQLコネクションを作成
var conn:SQLConnection = new SQLConnection(); //インスタンス作成
var db:File = new File("app:/sample.db"); //iPhoneアプリ内に含めたsample.dbをFileクラスを使って参照
conn.openAsync( db ); //データベースに非同期接続
  • SQLコネクションの成功失敗時のリスナ関数
conn.addEventListener(SQLEvent.OPEN, selectData); //コネクション生成完了時に呼ばれる
conn.addEventListener(SQLErrorEvent.ERROR, onError); //コネクション生成失敗時に呼ばれる
  • データの参照
function selectData( event:SQLEvent ):void
{
    var sql:String = "SELECT * FROM test"; //testテーブル全取得
    var sqlStat:SQLStatement = new SQLStatement(); //SQLStatementインスタンス作成。SQLを実行するためのクラス
    sqlStat.sqlConnection = conn; //利用するSQLConnectionオブジェクトを指定
    sqlStat.text = sql;
    sqlStat.addEventListener(SQLEvent.RESULT, showData); //実行が正常に完了したときに呼ばれる
    sqlStat.addEventListener(SQLErrorEvent.ERROR, onError); 
    sqlStat.execute();  //SQL実行
}
  • データの使用
function showData( event:SQLEvent ):void
{
    var result:SQLResult = SQLStatement( event.target ).getResult(); //target属性をSQLStatement型に変換してSQLResultオブジェクトを生成
    var str:String = "";
    for( var i:int = 0; i<result.data.length; i++ )
    {
		str = result.data[ i ]['id']  + " : "  + result.data[ i ]['title'];
		infoText.appendText(str); 
		infoText.appendText("\n");
    }
}
import flash.filesystem.*;
import flash.data.*;
import flash.events.SQLEvent;

/*text*/
var infoText:TextField = new TextField();  
var format:TextFormat = infoText.getTextFormat();
format.color = 0x000000;
format.size = 16;
infoText.defaultTextFormat = format;
infoText.border = false;
infoText.x = 0;
infoText.y = 0;
infoText.height = stage.stageHeight/2;
infoText.width = stage.stageWidth;
stage.addChild(infoText);
	
var conn:SQLConnection = new SQLConnection();
var db:File = new File("app:/sample.db");
conn.openAsync( db );

conn.addEventListener(SQLEvent.OPEN, selectData);
conn.addEventListener(SQLErrorEvent.ERROR, onError);


function selectData( event:SQLEvent ):void
{
    var sql:String = "SELECT * FROM test";
    var sqlStat:SQLStatement = new SQLStatement();
    sqlStat.sqlConnection = conn;
    sqlStat.text = sql;
    sqlStat.addEventListener(SQLEvent.RESULT, showData);
    sqlStat.addEventListener(SQLErrorEvent.ERROR, onError);
    sqlStat.execute();  
}

function showData( event:SQLEvent ):void
{
    var result:SQLResult = SQLStatement( event.target ).getResult();
	var str:String = "";
    for( var i:int = 0; i<result.data.length; i++ )
    {
		str = result.data[ i ]['id']  + " : "  + result.data[ i ]['title'];
		infoText.appendText(str); 
		infoText.appendText("\n");
    }
}

function onError( event:SQLErrorEvent ):void
{
	
	infoText.appendText(event.error.message);
}

canvasのwidthとheightの取得

<canvas id="canvas"></canvas>

document.getElementById('canvas').width

だと結果は「300」デフォルト。

<canvas id="canvas"></canvas>

#canvas {
   	width:500px;
	height:500px;
}

document.getElementById('canvas').width

だと結果は「300」デフォルト。

document.getElementById('canvas').style.width

だと空。

<canvas id="canvas" style="width:500px;height:500px;"></canvas>

document.getElementById('canvas').width

だと結果は「300」デフォルト。

document.getElementById('canvas').style.width

だと結果は「500」

<canvas id="canvas" width="500" height="500"></canvas>

document.getElementById('canvas').width

だと結果は「500」

document.getElementById('canvas').style.width

だと結果は空


ん?

BitmapDateにしたら縮小・拡大・回転が反映されなくてはまった件

画像を読み込んで、回転して、縮小して、Bitmapにしたらなんにもかわってなかった。

//loaderには読み込んだ画像が
loader.rotation = 90;
loader.scaleX = loader.scaleY = 0.5;

var bmd:BitmapData = new BitmapData(loader.width, loader.height); 
bmd.draw(loader); 
var bmp:Bitmap = new Bitmap(bmd);

失敗した。
loaderに対して変更加えても駄目で、drawするときにmatrixを指定しないといけないんだって。

//loaderには読み込んだ画像が
//loader.rotation = 90; ←いらない
//loader.scaleX = loader.scaleY = 0.5; ←いらない

var matrix:Matrix = new Matrix();
matrix.rotate(90 * Math.PI / 180);
matrix.scale(0.5, 0.5);
matrix.translate(loader.content.height,0);

var bmd:BitmapData = new BitmapData(loader.content.width * 0.5, loader.content.height * 0.5); 
bmd.draw(loader,matrix); 
var bmp:Bitmap = new Bitmap(bmd);

こんな感じにするみたいです。

EditTextがnullのとき

edittext.getText().toString().equals("") 

こうやって判断しました。


いや、いろいろと試して出来たので、忘れそうだからメモ。

edittext.getText().toString()==null
edittext.getText().toString()==""

とかやってた。
てかequalsとかあるんですね。

viewをsetNeedsDisplayで再描画しても再描画前のviewが残っちゃってる件

addSubviewしたviewをsetNeedsDisplayで再描画しました
なんど再描画しても再描画前のviewが残っている感じ


addSubviewするviewにbackgroundColorを指定すれば解決しました。


地味に嵌った件

Air Videoというアプリ便利

せっかくiphone/ipadがあるのだから、ベッドの上でゴロゴロしながら動画みたいよ!!
ってことで今回試してみたのは「Air Video」というアプリ。
このこすごいんです。できる子です。


使い方は簡単で、サーバソフトウェアをPCにインストールして共有するディレクトリを指定。
iphone/ipad側でがstoreからアプリをインストールするだけ。
対応していない形式の動画でも同時コンバートしながら見れちゃう。優秀!
一つ問題があるとすれば、視聴(コンバート)してるときにPC側のCPUが一瞬高くなるかな。古いPCだとパツパツかも。


[PC]
ここからサーバソフトウェアをダウンロード。
OSはwin/macに対応しているようです。


共有するディレクトリを指定


[iphone/ipad]
アプリをインストール
Air Video Free 無料版
Air Video 有料版 350円
があるようですね。
ぼくは有料版使ってます。


起動してサーバを追加します


共有ディレクトリ内の動画が一覧に表示されます(サンプル動画はflvとwmv)


Play with Live Conversionをクリックすると再生される


まぁあえて説明する必要はないくらい簡単でしたw
ちなみにwifi環境です。再生もすぐでした。
3G+外部ってなるともう少し時間かかると思いますが、とりあえずベッドの上でみるなら問題ないです。


Orb(?)ってのもあったんですけど、パッと見macに対応していなかったような気がした。もうちょい調べてみよう