0

プライベート静的関数に接続されている配列リストがあり、別のビュー(Flex Builder、アクションスクリプト)で別の配列リストを作成したいので、プライベート静的関数をコピーして名前と「選択」部分を編集しましたが、次のようなエラーが発生します:

「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>
4

3 に答える 3

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;
        }

それでも私のコーディングをきれいにする必要があります

于 2012-10-12T01:21:04.817 に答える
0

エラーは、静的メソッドに非静的クラスにアクセスしているためです。つまり、インスタンスはまだ作成されていないため、リンカは静的メンバー関数を見つけることができるはずですが、オブジェクトのどのインスタンスを解決する方法はありません。クラスをstaticと宣言すると、この問題は解決するはずです。

于 2012-10-12T00:02:06.793 に答える
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);
    }
}

}

于 2014-08-22T22:31:11.023 に答える