AIR cho Android – Phần 2

Trong phần 1 tôi đã giới thiệu về việc dùng AIR để tạo database và nhập dữ liệu vào database. Trong phần 2 này tôi tiếp tục giới thiệu bước tiếp theo là hiển thị dữ liệu từ database lên Flash.

Vì trong phần này đơn giản chỉ giới thiệu cách gọi dữ liệu từ database lên, nên trong database của bạn cần phải có sẵn dữ liệu rồi. Nếu chưa có xin hãy xem phần 1 để nhập dữ liệu hoặc bạn có thể sử dụng Plugin “SQLite Manager ” của Firefox để tạo database “myDB.sqlite” và nhập dữ liệu.

Ở bài này, trong AIR for Android document chúng ta cần 2 MovieClip là: “list_mc” là nơi chứa dữ liệu hiển thị từ database và mc Button có Linkage (Export for ActionScript) class: “button_cl”. Trong MovieClip này chứa 1 dynamic text “list_txt”.

– Code:

stop();
//Đừng quên import flash
import flash.filesystem.File;
import flash.data.*;
import flash.events.*;
import flash.display.*;
import flash.errors.*;
import flash.text.*;
import flash.trace.Trace;
import flash.ui.*;
 

//tạo kết nối sql mới
var conn:SQLConnection= new SQLConnection();
//addEventListener cho SQLEvent
conn.addEventListener(SQLEvent.OPEN, openHandler);
//tạo database nếu chưa có
var dbFile:File = File.applicationDirectory.resolvePath("myDB.sqlite");
conn.openAsync(dbFile);

function openHandler(event:SQLEvent):void
{
//tạo sql statement mới
var sql:SQLStatement=new SQLStatement();
//thiết lập statement để kết nối database
sql.sqlConnection = conn;
//tạo bảng nếu chưa có
sql.text= "CREATE TABLE IF NOT EXISTS contact(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"contact_name TEXT, " +
"telefon INTEGER)";

//khi tạo bảng xong, nhận dữ liệu từ database
sql.addEventListener(SQLEvent.RESULT,retrieveData);

//gọi execute
sql.execute();
}
//gọi dữ liệu từ database
function retrieveData(event:SQLEvent = null):void
{

//tạo sql statement variable mới
var sql:SQLStatement=new SQLStatement();
sql.sqlConnection = conn;
//lấy thông tin từ bảng và sắp xếp thứ tự theo _id
sql.text =  "SELECT * " +
"FROM contact ORDER BY _id";
//tạo event listener mới để hiển thị
sql.addEventListener(SQLEvent.RESULT, selectHandler);
sql.execute();
}

function selectHandler(event:SQLEvent):void
{
var result:SQLResult = event.target.getResult();
if (result.data == null)
{
trace("rỗng");
}
else
{
trace("ko rỗng");
}
//kiểm tra kết quả nếu nó không rỗng
if (result != null && result.data != null)
{
//tạo danh sách
for (var i:Number = 0; i < result.data.length; i++)
{
var myClip:button_cl = new button_cl();
//button_cl là Linkage của MC button
myClip.name = result.data[i].contact_name;
//hiển thị contact_name lên
myClip.list_txt.text = result.data[i].contact_name;
//list_txt là dynamic text trong MC button
//hiển thị dạng list từ trên xuống
var buttonX:Number = 0;
var buttonY:Number = 10;
//khoảng cách giữa 2 buttons là 30 px;
var buttonSpacing:Number = 30;
myClip.x = buttonX;
myClip.y = i * buttonSpacing;
//gắn các buttons vào MovieClip list_mc
list_mc.addChild(myClip);
myClip.addEventListener(MouseEvent.CLICK, clickHandler);
}
}
}
//khi click lên button
function clickHandler(e:MouseEvent):void
{
trace("Click: " + e.currentTarget.name.toString() );
//kết quả: hiển thị contact_name của button được click
}