WEAVE 05.09 – AIR-Anwendung lokaler Datenbank
Bookmark-Anwendung mit AIR
Die Adobe Integrated Runtime (AIR) ermöglicht die Entwicklung plattformübergreifender Webanwendungen für den Desktop, wie sie zum Beispiel von eBay oder AOL eingesetzt werden. Mit dem folgenden Quellcode von Simon Widjaja können Sie in rund drei Stunden eine kleine Anwendung zur Verwaltung von Bookmarks entwickeln.
1// Value Object definieren
{{Listing com.simonwidjaja.workshop.BookmarkVO}}
-
package com.simonwidjaja.workshop
-
{
-
[Bindable]
-
public class BookmarkVO
-
{
-
public var id:int;
-
public var url:String;
-
public var title:String;
-
public var description:String;
-
-
public function BookmarkVO( object:Object=null ):void {
-
if ( object ) {
-
id = object.id;
-
url = object.url;
-
title = object.title;
-
description = object.description;
-
}
-
}
-
}
-
}
2// Datenbankverbindung herstellen
{{Listing: DatabaseConnector (1)}}
-
{
-
import flash.data.SQLConnection;
-
import flash.data.SQLResult;
-
import flash.data.SQLStatement;
-
import flash.filesystem.File;
-
-
public class DatabaseConnector
-
{
-
[Bindable] public var bookmarks:Array = new Array();
-
-
private var conn:SQLConnection;
-
private var firstTimeFlag:Boolean;
-
-
private static var _instance:DatabaseConnector;
-
public static function getInstance()
atabaseConnector { -
if ( !_instance )
-
_instance = new DatabaseConnector( new SingletonEnforcer() );
-
return _instance;
-
}
-
-
public function DatabaseConnector( singleton:SingletonEnforcer ) {
-
}
-
-
public function connect():void {
-
var file:File = File.applicationStorageDirectory.resolvePath( „Datenbank“ );
-
trace( „file.nativePath: „+file.nativePath );
-
firstTimeFlag = ( file.exists ) ? false : true;
-
conn = new SQLConnection();
-
conn.open( file );
-
if ( firstTimeFlag ) createTable();
-
//else fetchAllBookmarks();
-
}
-
-
private function createTable():void {
-
var statement:SQLStatement = new SQLStatement();
-
statement.sqlConnection = conn;
-
statement.text = „CREATE TABLE bookmarks ( id INTEGER PRIMARY KEY AUTOINCREMENT, „ +
-
„url CHAR(200), title CHAR(200), description CHAR(1000) );“;
-
statement.execute();
-
}
-
// Hier folgen spŠter die CRUD-Methoden
-
}
-
}
-
class SingletonEnforcer {}
Um sicherzustellen, dass unsere Datenbank wie gewünscht angelegt wird, können wir testweise die connect()-Methode direkt in unserem MXML-Dokument wie folgt ausführen:
-
<![CDATA[
-
import com.simonwidjaja.workshop.DatabaseConnector;
-
DatabaseConnector.getInstance().connect();
-
]]>
-
</mx:Script>
Plugin, um das Ergebnis zu prüfen beziehungsweise direkt auf der Datenbank arbeiten zu können: SQLite Manager
3// Datensätze lesen und schreiben
-
public function fetchAllBookmarks():void {
-
var statement:SQLStatement = new SQLStatement();
-
statement.sqlConnection = conn;
-
statement.text = „SELECT * FROM bookmarks;“;
-
statement.execute();
-
var result:SQLResult = statement.getResult();
-
var bookmarks:Array = new Array();
-
for each ( var entry:Object in result.data ) {
-
bookmarks.push( new BookmarkVO( entry ) );
-
}
-
this.bookmarks = bookmarks;
-
}
-
-
public function saveBookmark( bookmark:BookmarkVO, action:String ):void {
-
var statement:SQLStatement = new SQLStatement();
-
statement.sqlConnection = conn;
-
if ( action==“update“ ) {
-
statement.text = „UPDATE bookmarks SET url=:url, title=:title, description=:description WHERE id=:id“;
-
statement.parameters[„:id“] = bookmark.id;
-
}
-
else {
-
statement.text = „INSERT INTO bookmarks (url, title, description) VALUES (:url, :title, :description);“;
-
}
-
statement.parameters[„:url“] = bookmark.url;
-
statement.parameters[„:title“] = bookmark.title;
-
statement.parameters[„:description“] = bookmark.description;
-
statement.execute();
-
fetchAllBookmarks();
-
}
-
-
public function deleteBookmark( bookmark:BookmarkVO ):void {
-
var statement:SQLStatement = new SQLStatement();
-
statement.sqlConnection = conn;
-
statement.text = „DELETE FROM bookmarks WHERE id=:id;“;
-
statement.parameters[„:id“] = bookmark.id;
-
statement.execute();
-
fetchAllBookmarks();
-
}
4// View zum Hinzufügen und Ändern
{{Listing com.simonwidjaja.workshop.EditView}}
-
-
<mx:Panel xmlns:mx=“http://www.adobe.com/2006/mxml“
-
xmlns:validator=“com.simonwidjaja.workshop.validator.*“
-
layout=“vertical“ width=“500“ height=“300“
-
paddingLeft=“25“ paddingTop=“25“ paddingRight=“25“
-
borderAlpha=“0.8“ title=“HinzufŸgen/Bearbeiten“>
-
-
<mx:Script>
-
<![CDATA[
-
import mx.utils.ObjectUtil;
-
import mx.managers.PopUpManager;
-
import com.simonwidjaja.workshop.BookmarkVO;
-
import com.simonwidjaja.workshop.DatabaseConnector;
-
-
[Bindable] public var bookmark:BookmarkVO;
-
-
private function save():void {
-
bookmark.url = urlInput.text;
-
bookmark.title = titleInput.text;
-
bookmark.description = descriptionInput.text;
-
var action:String;
-
if ( bookmark.id ) action = „update“;
-
else action = „insert“;
-
var databaseConnector:DatabaseConnector = DatabaseConnector.getInstance();
-
databaseConnector.saveBookmark( bookmark, action );
-
close();
-
}
-
private function close():void {
-
PopUpManager.removePopUp( this );
-
}
-
]]>
-
</mx:Script>
-
-
<mx:RegExpValidator source=“{ urlInput }“ property=“text“
-
expression=“^(https?://)[A-Za-z0-9]+[.][A-Za-z0-9]+“
-
noMatchError=“Keine gŸltige URL“ />
-
-
<mx:Text text=“Bitte geben Sie die Eigenschaften des Bookmarks ein:“ />
-
-
<mx:Form width=“100%“>
-
<mx:FormItem label=“URL“ width=“100%“>
-
<mx:TextInput id=“urlInput“ width=“100%“ text=“{ bookmark.url }“ />
-
</mx:FormItem>
-
<mx:FormItem label=“Titel“ width=“100%“>
-
<mx:TextInput id=“titleInput“ width=“100%“ text=“{ bookmark.title }“ />
-
</mx:FormItem>
-
<mx:FormItem label=“Beschreibung“ width=“100%“>
-
<mx:TextArea id=“descriptionInput“ width=“100%“ text=“{ bookmark.description }“ />
-
</mx:FormItem>
-
</mx:Form>
-
-
<mx:ControlBar horizontalAlign=“right“>
-
<mx:Button label=“Abbrechen“ click=“close()“ />
-
<mx:Button label=“Speichern“ click=“save()“ />
-
</mx:ControlBar>
-
-
</mx:Panel>
5// Zusammenfügen der einzelnen Elemente
{{Listing main.mxml}}
-
-
<mx:WindowedApplication xmlns:mx=“http://www.adobe.com/2006/mxml“
-
layout=“absolute“ minWidth=“800“ minHeight=“600“
-
creationComplete=“onCreationComplete()“>
-
-
<mx:Script>
-
<![CDATA[
-
import mx.events.ListEvent;
-
import com.simonwidjaja.workshop.BookmarkVO;
-
import com.simonwidjaja.workshop.EditView;
-
import mx.managers.PopUpManager;
-
import com.simonwidjaja.workshop.DatabaseConnector;
-
-
[Bindable]
-
private var connector:DatabaseConnector = DatabaseConnector.getInstance();
-
-
private function onCreationComplete():void {
-
connector.connect();
-
}
-
private function openEditView( action:String ):void {
-
var popup:EditView = PopUpManager.createPopUp( this, EditView, true ) as EditView;
-
popup.bookmark = ( myDataGrid.selectedItem ) ? myDataGrid.selectedItem as BookmarkVO : new BookmarkVO();
-
PopUpManager.centerPopUp( popup );
-
}
-
private function onDeleteClick():void {
-
var selectedBookmark:BookmarkVO = myDataGrid.selectedItem as BookmarkVO;
-
connector.deleteBookmark( selectedBookmark );
-
}
-
private function onDataGridChange( event:ListEvent ):void {
-
myHTML.location = ( event.itemRenderer.data as BookmarkVO ).url;
-
}
-
]]>








