dbを読み込む
作成済みのdbを読み込む話
- sqliteで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
- ライブラリのインポート
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に対応していなかったような気がした。もうちょい調べてみよう