Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Flash Builder移动应用程序中的数据库(动作脚本3.0)_Database_Actionscript 3_Apache Flex_Actionscript_Flash Builder - Fatal编程技术网

Database Flash Builder移动应用程序中的数据库(动作脚本3.0)

Database Flash Builder移动应用程序中的数据库(动作脚本3.0),database,actionscript-3,apache-flex,actionscript,flash-builder,Database,Actionscript 3,Apache Flex,Actionscript,Flash Builder,我正在尝试使用AdobeFlashBuilder4.6为android构建一个简单的手机通讯录应用程序,但是当我尝试运行应用程序调试器时,总是给我一些错误。。。我发布了我项目中的所有代码。请看:( dbHandler类: package ActionScript { import air.net.URLMonitor; import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLState

我正在尝试使用AdobeFlashBuilder4.6为android构建一个简单的手机通讯录应用程序,但是当我尝试运行应用程序调试器时,总是给我一些错误。。。我发布了我项目中的所有代码。请看:(

dbHandler类:

package ActionScript
{
import air.net.URLMonitor;

import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
import flash.net.URLLoader;
import flash.net.URLRequest;

import mx.collections.ArrayCollection;

import views.NewContactView;
import views.PhoneBookHomeView;






public class dbHandler
{

    private var urlMonitor:URLMonitor;
    private var urlLoader:URLLoader;  
    private var urlRequest:URLRequest;  
    private var sqlConnection:SQLConnection;
    private var db:File;
    private var allContacts:ArrayCollection = new ArrayCollection();

    public function dbHandler()
    {
        trace("dbHandler object was created");
        openDb();
    }

    private function openDb():void
    {
        db = File.applicationStorageDirectory.resolvePath("DataBase.db");

        sqlConnection = new SQLConnection();   
        sqlConnection.addEventListener(SQLErrorEvent.ERROR, onSQLError);

        if(db.exists) 
        {
            trace("DataBase exists");
            sqlConnection.addEventListener(SQLEvent.OPEN, onOpenDb);

        } else {
            trace("DataBase does not exist");
            sqlConnection.addEventListener(SQLEvent.OPEN, onCreateDb);

        }

        sqlConnection.openAsync(db);
    }

    private function onCreateDb(event:SQLEvent):void 
    {
        trace("The database was created");
        createTable(); 
    }

    private function onOpenDb(e:SQLEvent):void 
    {      
        trace("The database was opened");

        if(SQLConnection(e.target).connected)
        {
            trace("SQL Connection is connected");
        }           

    } 

    private function onSQLError(e:SQLErrorEvent):void 
    {     
        var err:String = "-> Error id :" 
            + e.error.errorID 
            + " \ -> Details:" 
            + e.error.details;

        trace ("SQL Error :" + err + "->Error");
    }  

    private function createTable():void
    {
        var sqlText:String = "CREATE TABLE IF NOT EXISTS contacts ( _id INTEGER PRIMARY KEY AUTOINCREMENT," +
        " name TEXT,value TEXT );";
        trace("Creating table by : " + sqlText);
        var createTableSQL:SQLStatement = new SQLStatement();
        createTableSQL.addEventListener(SQLEvent.RESULT, onTable);
        createTableSQL.addEventListener(SQLErrorEvent.ERROR, onSQLError);
        createTableSQL.sqlConnection = sqlConnection;
        createTableSQL.text = sqlText;
        createTableSQL.execute();
    }

    private function onTable(e:SQLEvent):void 
    { 
        trace("The table was created");      
    }

    public function deleteContact(id:int):void
    {      
        var sqlText:String = "DELETE FROM contacts WHERE _id = " + id;
        trace("Deleting item  (id="+id+") by:"+sqlText);
        var deleteTeamSQL:SQLStatement = new SQLStatement();
        deleteTeamSQL.sqlConnection = sqlConnection;
        deleteTeamSQL.addEventListener(SQLEvent.RESULT, onDelete);
        deleteTeamSQL.addEventListener(SQLErrorEvent.ERROR, onSQLError);
        deleteTeamSQL.text = sqlText;
        deleteTeamSQL.execute();                  
    }

    private function onDelete(e:SQLEvent):void 
    {
        trace("item was deleted");
    } 

    public function getAll():ArrayCollection
    {
        var sqlText:String = "SELECT * FROM contacts";
        trace("Geting all contacts by: "+sqlText);
        var getAllSQL:SQLStatement = new SQLStatement();
        getAllSQL.sqlConnection = sqlConnection;
        getAllSQL.addEventListener(SQLEvent.RESULT, ongetAll);
        getAllSQL.addEventListener(SQLErrorEvent.ERROR, onSQLError);
        getAllSQL.text = sqlText;
        getAllSQL.execute();
                return allContacts;
    }

    private function ongetAll(e:SQLEvent):void
    {
        trace("All contacts were got");
            var selectSQL:SQLStatement = SQLStatement(e.target); 
            var result:SQLResult = selectSQL.getResult();  
            if(result.complete)
            {
                if(result.data)
                {

                    for each(var contact:Object in result.data)
                    {
                        var obj:Object = { 
                            Name:contact["name"],
                            Value:contact["value"]
                        };
                    allContacts.addItem(obj);   

                    }
                }
            }
    }

    public function insert(name:String , value:String):void{
        var sqlText:String = "INSERT INTO contacts (name,value) VALUES ('" +
            name +
            "','" +
            value  +
            "')";
        trace("Inserting into contacts by: "+sqlText);
        var insertSQL:SQLStatement = new SQLStatement();
        insertSQL.sqlConnection = sqlConnection;
        insertSQL.addEventListener(SQLEvent.RESULT, onInsert);
        insertSQL.addEventListener(SQLErrorEvent.ERROR, onSQLError);
        insertSQL.text = sqlText;
        insertSQL.execute();
    }

    private function onInsert(event:SQLEvent):void
    {
        trace("Record inserted");

    }

}
  }
HomeView:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="Contacts"
    preinitialize="preinitializeHandler(event)">
<fx:Script>
    <![CDATA[
        import ActionScript.dbHandler;

        import mx.collections.ArrayCollection;
        import mx.collections.ArrayList;
        import mx.events.FlexEvent;

        import spark.components.ViewNavigator;
        import spark.events.IndexChangeEvent;

        import views.NewContactView;
        import views.PhoneBookHomeView;


        private var conn:SQLConnection;
        private var initComplete:Boolean = false;
        private var sqlStat:SQLStatement;
        private var sqlConnection:SQLConnection;
        [Bindable]
        public var contacts:ArrayList;

        public var dbHandlerOBJ:dbHandler = new dbHandler();




        protected function button1_clickHandler(event:MouseEvent):void
        {
            navigator.pushView(NewContactView , null);
        }


        protected function preinitializeHandler(event:FlexEvent):void
        {
            PhoneBookList.dataProvider = dbHandlerOBJ.getAll(); 
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:navigationContent>
    <s:Button label="Search"/>
</s:navigationContent>
<s:List left="0" right="0" top="0" bottom="80" id="PhoneBookList" change="">
<s:itemRenderer>
    <fx:Component>
    <s:IconItemRenderer label="label" messageField="Message"/>
    </fx:Component>
</s:itemRenderer>
</s:List>
<s:Button left="5" right="5" top="677" bottom="10"  label="Add New Contact" click="button1_clickHandler(event)"/>

我认为db不存在……但我不知道我的类为什么不工作:(

触发预初始化事件时,您无法从实例获取/读取任何内容

如果您参考官方文档(“关于初始化和creationComplete事件”部分)或该链接:,当触发预初始化事件时,对象的实例为原始(也称为空)


您应该将
PhoneBookList.dataProvider=dbHandlerOBJ.getAll();
插入
Initialized
或更好的
CreationComplete
事件。

您似乎没有返回getAll()的任何内容函数,注释的部分怎么了?//:ArrayCollection和//return allContacts;这不是问题,即使它们没有注释,调试器也会再次显示所有错误:(即使链接是关于Flex 3的,这对最新版本仍然有效。
[SWF] PhoneBook.swf - 3,451,124 bytes after decompression
dbHandler object was created
DataBase exists
Geting all contacts by: SELECT * FROM contacts
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at views::PhoneBookHomeView/preinitializeHandler()[C:\Users\Adobe Flash                     Builder 4.6\PhoneBook\src\views\PhoneBookHomeView.mxml:40]
at views::PhoneBookHomeView/___PhoneBookHomeView_View1_preinitialize()[C:\Users\Adobe Flash Builder 4.6\PhoneBook\src\views\PhoneBookHomeView.mxml:4]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:13152]
at mx.core::UIComponent/initialize()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:7624]
at spark.components::View/initialize()[E:\dev\4.y\frameworks\projects\mobilecomponents\src\spark\components\View.as:999]
at views::PhoneBookHomeView/initialize()
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::childAdded()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:7495]
at mx.core::UIComponent/addChildAt()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:7199]
at spark.components::Group/addDisplayObjectToDisplayList()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\Group.as:2037]
at spark.components::Group/http://www.adobe.com/2006/flex/mx/internal::elementAdded()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\Group.as:1628]
at spark.components::Group/addElementAt()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\Group.as:1387]
at spark.components::Group/addElement()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\Group.as:1345]
at spark.components::SkinnableContainer/addElement()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\SkinnableContainer.as:761]
at spark.components::ViewNavigator/createViewInstance()[E:\dev\4.y\frameworks\projects\mobilecomponents\src\spark\components\ViewNavigator.as:2018]
at spark.components::ViewNavigator/commitNavigatorAction()[E:\dev\4.y\frameworks\projects\mobilecomponents\src\spark\components\ViewNavigator.as:1932]
at spark.components::ViewNavigator/commitProperties()[E:\dev\4.y\frameworks\projects\mobilecomponents\src\spark\components\ViewNavigator.as:1301]
at mx.core::UIComponent/validateProperties()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:8219]
at mx.managers::LayoutManager/validateProperties()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:597]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:783]
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]