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 回答