2012-10-11 75 views
0

我有一個數組列表,它與一個私有靜態函數連接,並希望在另一個視圖(Flex生成器,動作腳本)上創建另一個數組列表,因此我複製了編輯該私有靜態函數名稱和「選擇」部分,但我收到錯誤消息:多個數組,私有靜態函數

「1061:通過靜態類型類的引用調用可能未定義的方法成員。」

這裏是AS的代碼:

package model 
{ 
    import flash.data.SQLConnection; 
    import flash.data.SQLResult; 
    import flash.data.SQLStatement; 
    import flash.events.SQLEvent; 
    import flash.filesystem.File; 
    import flash.filesystem.FileMode; 
    import flash.filesystem.FileStream; 

    import model.Dish; 

    import mx.collections.ArrayCollection; 

    public class SQLiteDatabase 
    { 
     private static var _sqlConnection:SQLConnection; 

     public static function get sqlConnection():SQLConnection 
     { 
      if (_sqlConnection) 
       return _sqlConnection; 
      openDatabase(File.desktopDirectory.resolvePath("test.db")); 
      return _sqlConnection; 
     } 

     public function getNote(id:int):Dish 
     { 
      var sql:String = "SELECT id, title, time, message FROM notes WHERE id=?"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.parameters[0] = id; 
      stmt.execute(); 
      var result:Array = stmt.getResult().data; 
      if (result && result.length == 1) 
       return processRow(result[0]); 
      else 
       return null; 
     } 
     public function getmember(id:int):Dish 
     { 
      var sql:String = "SELECT id, title, time, message FROM notes WHERE id=?"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.parameters[0] = id; 
      stmt.execute(); 
      var result:Array = stmt.getResult().data; 
      if (result && result.length == 1) 
       return processRow(result[0]); 
      else 
       return null; 
     } 

     public function getMYBlist(id:int):Dish 
     { 
      var sql:String = "SELECT id, title, time, message FROM notes WHERE id=?"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.parameters[0] = id; 
      stmt.execute(); 
      var result:Array = stmt.getResult().data; 
      if (result && result.length == 1) 
       return processRow(result[0]); 
      else 
       return null; 
     } 

     public static function notes():ArrayCollection 
     { 
      var noteList:ArrayCollection = new ArrayCollection(); 

      var sql:String = "SELECT id, title, time, message FROM notes"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.execute(); 
      var sqlResult:SQLResult = stmt.getResult(); 
      if (sqlResult) { 
       var result:Array = sqlResult.data; 
       if (result) { 
        for (var index:Number = 0; index < result.length; index++) { 
         noteList.addItem(processRow(result[index])); 
        } 
       } 
      } 
      return noteList; 
     } 

     public static function members():ArrayCollection 
     { 
      var memberslist:ArrayCollection = new ArrayCollection(); 

      var sql:String = "SELECT id, name FROM members"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.execute(); 
      var sqlResult:SQLResult = stmt.getResult(); 
      if (sqlResult) { 
       var result:Array = sqlResult.data; 
       if (result) { 
        for (var index:Number = 0; index < result.length; index++) { 
         memberslist.addItem(processRow(result[index])); 
        } 
       } 
      } 
      return memberslist; 
     } 




     public static function addNote(note:Dish):void 
     { 
      var sql:String = 
       "INSERT INTO notes (title, time, message) " + 
       "VALUES (?,?,?)"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.parameters[0] = note.title; 
      stmt.parameters[1] = note.time; 
      stmt.parameters[2] = note.message; 
      stmt.execute(); 
     } 

     public static function addMember(note:Dish):void 
     { 
      var sql:String = 
       "INSERT INTO notes (title, time, message) " + 
       "VALUES (?,?,?)"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.parameters[0] = note.title; 
      stmt.parameters[1] = note.time; 
      stmt.parameters[2] = note.message; 
      stmt.execute(); 
     } 

     public static function deleteNote(note:Dish):void 
     { 
      var sql:String = "DELETE FROM notes WHERE id=?"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.parameters[0] = note.id; 
      stmt.execute(); 
     } 



     public static function updateNote(note:Dish):void 
     { 
      var sql:String = "UPDATE notes SET title=?, time=?, message=? WHERE id=?"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.parameters[0] = note.title; 
      stmt.parameters[1] = note.time; 
      stmt.parameters[2] = note.message; 
      stmt.parameters[3] = note.id; 
      stmt.execute(); 
     } 



     protected static function processRow(o:Object):Dish 
     { 
      var note:Dish = new Dish(); 
      note.id = o.id; 
      note.title = o.title == null ? "" : o.title; 
      note.time = o.time == null ? "" :o.time; 
      note.message = o.message == null ? "" : o.message; 
      return note; 
     } 

     public static function openDatabase(file:File):void 
     { 
      var newDB:Boolean = true; 
      if (file.exists) 
       newDB = false; 
      _sqlConnection = new SQLConnection(); 
      _sqlConnection.open(file); 
      if (newDB) 
      { 
       createDatabase(); 
       populateDatabase(); 
      } 
     } 

     protected static function createDatabase():void 
     { 
      var sql:String = 
       "CREATE TABLE IF NOT EXISTS notes ("+ 
       "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       "title VARCHAR(50), " + 
       "time VARCHAR(50), " + 
       "message VARCHAR(200))"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.execute();   
     } 

     protected static function populateDatabase():void 
     { 
      var file:File = File.applicationDirectory.resolvePath("assets/notes.xml"); 
      if (!file.exists) return; 
      var stream:FileStream = new FileStream(); 
      stream.open(file, FileMode.READ); 
      var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable)); 
      stream.close(); 
      for each (var n:XML in xml.note) 
      { 
       var note:Dish = new Dish(); 
       note.id = n.id; 
       note.title = n.title; 
       note.time = n.time; 
       note.message = n.message; 
       addNote(note); 
      } 
     } 

    } 
} 

和MXML文件的代碼:

<?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="Profile"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      import model.Dish; 
      import model.SQLiteDatabase; 

      import spark.events.IndexChangeEvent; 

      protected function onNote2Selected(event:IndexChangeEvent):void { 
       var selectedNote:Dish = event.currentTarget.dataProvider[event.newIndex]; 
       navigator.pushView(MemberDetailsView, selectedNote); 
      } 


      protected function onAddButtonClicked(event:MouseEvent):void { 
       navigator.pushView(AddMemberView); 
      } 

     ]]> 
    </fx:Script> 


    <s:VGroup gap="-1"> 
    </s:VGroup> 
    **<s:List dataProvider="{SQLiteDatabase.members()}" change="onNoteSelected(event)"** 
      left="0" right="0" top="0" bottom="0"> 

     <s:itemRenderer> 
      <fx:Component> 
       <s:IconItemRenderer labelField="title" messageField="message"/> 
      </fx:Component> 
     </s:itemRenderer> 
    </s:List> 
</s:View> 
+0

凡onNoteSelected定義? – ThatSteveGuy

回答

0

這個錯誤是因爲你正在訪問一個非靜態類的靜態方法。其含義是該實例還沒有被創建,所以雖然鏈接器應該能夠找到靜態成員函數,但沒有辦法解決該對象的哪個實例。如果你聲明這個類是靜態的,它應該解決這個問題。

+0

更改了onNoteSelected零件並使其工作。它讓我頭痛,但由於像你這樣的人的幫助,我可以做到。 –

0
public static function notes():ArrayCollection 
     { 
      var noteList:ArrayCollection = new ArrayCollection(); 

      var sql:String = "SELECT id, title, time, message FROM notes"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.execute(); 
      var sqlResult:SQLResult = stmt.getResult(); 
      if (sqlResult) { 
       var result:Array = sqlResult.data; 
       if (result) { 
        for (var index:Number = 0; index < result.length; index++) { 
         noteList.addItem(processRow(result[index])); 
        } 
       } 
      } 
      return noteList; 
     } 

     public static function members():ArrayCollection 
     { 
      var noteList:ArrayCollection = new ArrayCollection(); 

      var sql:String = "SELECT testid, Dish_Name FROM DishInventory"; 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.execute(); 
      var sqlResult:SQLResult = stmt.getResult(); 
      if (sqlResult) { 
       var result:Array = sqlResult.data; 
       if (result) { 
        for (var index:Number = 0; index < result.length; index++) { 
         noteList.addItem(processRow2(result[index])); 
        } 
       } 
      } 
      return noteList; 
     } 
protected static function processRow(o:Object):Dish 
     { 
      var note:Dish = new Dish(); 
      note.id = o.id; 
      note.title = o.title == null ? "" : o.title; 
      note.time = o.time == null ? "" :o.time; 
      note.message = o.message == null ? "" : o.message; 
      return note; 
     } 

     protected static function processRow2(o:Object):Dish 
     { 
      var note:Dish = new Dish(); 
      note.id = o.testID; 
      note.title = o.Dish_Name == null ? "" : o.Dish_Name; 

      return note; 
     } 

仍然得到了清理我的編碼雖然

0

解決的辦法是:

private function sqlResult(res:SQLEvent):void { 

var sqlResult:SQLResult = stmt.getResult(); 

if (sqlResult) {   
    var data:Array = sqlResult.data; 

    contactList = new ArrayCollection(); 

    for each(var item:Object in data){ 
     contact = new Contact(item); 
     contactList.addItem(contact); 
    } 
} 

}