2

Facebook の連絡先から SqLite に名前と画像を追加できません。これは、追加がループ内にあり、イベントが完了したときにローダーが開始されるためです。フロー コードはデータベースにデータを追加しますが、オブジェクトの名前にはループから抜け出す最後の人物が含まれています。何かご意見は?ありがとう!

        private var person:PersonVO;

    protected function handleFriendsLoad(response:Object, fail:Object):void 
    {
        if (fail) { return }

        var friends:Array = response as Array;
        var l:uint=friends.length;

        for (var i:uint=0;i<l;i++) {
            var friend:Object = friends[i];

            FacebookDesktop.api('/'+friend.id, loadData);
        } 
    }

    private function loadData(object:Object, fail:Object):void
    {
        if (fail) { return; }

        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageToByteArray);
        loader.load(new URLRequest(FacebookDesktop.getImageUrl(object.id, 'large')));

        person = new PersonVO()

        person.name = object.first_name;
    }

    private function imageToByteArray(event:Event):void
    {
        var wczytaj:Loader = (event.target as LoaderInfo).loader;
        var image:Bitmap = Bitmap(wczytaj.content);
        var encoderJpeg:JPEGEncoder = new JPEGEncoder();
        var byteArray:ByteArray = encoderJpeg.encode(image.bitmapData);

        person.image= byteArray;

        insert(person);
    } 

    private function insert(person:PersonVO):void
    {
        dbStatement.text = "INSERT INTO person (name,image) values(:name,:jpeg)";
        dbStatement.parameters[":name"] = person.name; 
        dbStatement.parameters[":jpeg"] = person.image; 
        dbStatement.execute();
    }
4

1 に答える 1

0

Loaderクラスの機能を拡張します。

 dynamic class DynamicLoader extends Loader{}

次に、必要なものを のインスタンスに格納しますDynamicLoader

private function loadData(object:Object, fail:Object):void
{
    if (fail) { return; }

    var person:PersonVO = new PersonVO();
    person.name = object.first_name;

    var loader:DynamicLoader = new DynamicLoader();
    loader.person = person;
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageToByteArray);
    loader.load(new URLRequest(FacebookDesktop.getImageUrl(object.id, 'large')));
}

private function imageToByteArray(event:Event):void
{
    var wczytaj:DynamicLoader = (event.target as LoaderInfo).loader as DynamicLoader;
    var image:Bitmap = Bitmap(wczytaj.content);
    var encoderJpeg:JPEGEncoder = new JPEGEncoder();
    var byteArray:ByteArray = encoderJpeg.encode(image.bitmapData);

    var person:PersonVO = wczytaj.person;
    person.image= byteArray;

    insert(person);
} 

私は使用していませんprivate var person:PersonVO;。したがって、クラスの他のメソッドで使用していない場合は、完全に削除できます。

于 2012-04-14T18:08:37.493 に答える