Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Загрузка аватарок друзей. (http://www.flasher.ru/forum/showthread.php?t=206196)

ZackMercury 19.01.2014 02:28

Загрузка аватарок друзей.
 
В каком формате возвращается результат запроса
Код AS3:

VK.api("getProfiles", {uids: friends, fields: "photo"}, process, letUserKnow);

Обработка результата как URL-строки не сработала...

Код AS3:

private function addFriendsToList(friends:Array):void
                {
                        for (var currentFriend:int = 0; currentFriend < friends.length; currentFriend ++)
                        {
                                var newFriend:Friend = new Friend();
                                // setting friend's name for each of the friends
                                newFriend.setName(friends[currentFriend].first_name + " " + friends[currentFriend].last_name);
                                // setting uid for each of the friends;
                                newFriend.setUID(friends[currentFriend].uid);
                                // setting photo to load for each of the friends;
                                newFriend.loadPhoto(friends[currentFriend].photo);
                                //adding current friend to the list of all friends;
                                _friends.push(newFriend);
                        }
                        showFriends();
                }

Код AS3:

package com.engine 
{
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.display.BitmapData;
        import flash.events.Event;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.text.TextField;
        import flash.display.LoaderInfo;
 
        public class Friend extends Sprite
        {
                private var _uid:int;
                private var _avatar:Sprite;
                private var _nick:String;
                private var _fullName:String;
                private var _methanic:Methanic;
 
                private var _nameField:TextField;
 
                public function Friend()
                {
                        trace("... Friend initialized.");
                        _avatar = new Sprite();
                        this.addEventListener(Event.ADDED_TO_STAGE, prepare);
                        this.addEventListener(Event.REMOVED_FROM_STAGE, unprepare);
                }
 
                private function prepare(e:Event):void
                {
                        this.addChild(_avatar);
                        _nameField = new TextField();
                        _nameField.text = _fullName;
                        this.addChild(_nameField);
                }
 
                private function unprepare(e:Event):void
                {
 
                }
 
                public function updateProfile():void
                {
 
                }
 
                public function setName(name:String):void
                {
                        _fullName = name;
                        this.updateProfile();
                }
 
                public function loadPhoto(url:String):void
                {
                        var photoStorage:Loader = new Loader();
                        photoStorage.contentLoaderInfo.addEventListener(Event.COMPLETE, setAvatar);
                        photoStorage.load(new URLRequest(url));
                }
 
                private function setAvatar(result:Event):void
                {
                        var bitmapData:BitmapData = Bitmap(LoaderInfo(result.target).content).bitmapData;
                        var avatar:Bitmap = new Bitmap(bitmapData);
                        _avatar.addChild(avatar);
                }
 
                public function getName():String
                {
                        return _fullName;
                }
 
                public function setUID(uid:int):void
                {
                        _uid = uid;
                }
 
                public function getUID():int
                {
                        return _uid;
                }
 
        }
 
}


ZackMercury 19.01.2014 02:38

Вложений: 1
В результате имя выводится, а аватарка нет. Ошибки в браузере не выбиваются, к сожалению.

caseyryan 19.01.2014 16:37

Цитата:

Ошибки в браузере не выбиваются, к сожалению.
Потому что надо установить отладочный плеер

ZackMercury 19.01.2014 17:46

Цитата:

Сообщение от caseyryan (Сообщение 1157694)
Потому что надо установить отладочный плеер

Большое спасибо!
Пишет, что не удалось загрузить аватарки, потому как необходим Policy-файл, а checkPolicyFile флаг не был установлен, когда это "медиа" было загружено.

Добавлено через 1 минуту
Код:

SecurityError: Error #2122: Security sandbox violation: LoaderInfo.content: http://cs412821.vk.me/u160005943/5d57ab39ccda9d.zip cannot access http://vk.com/images/camera_c.gif. A policy file is required, but the checkPolicyFile flag was not set when this media was loaded.
        at flash.display::LoaderInfo/get content()
        at com.engine::Friend/setAvatar()


caseyryan 19.01.2014 21:33

Это не файл политик нужен, а контекст загрузки
Делается так:
Код AS3:

var context:LoaderContext = new LoaderContext(true);

И передаем его вторым параметром в load загрузчика

ZackMercury 19.01.2014 21:35

Спасибо, будем пробовать. Читал уже несколько тем, где вы пропускали аватарки через сервера(меня даже затошнило от этого).

Добавлено через 8 минут
Спасибо, теперь выбивает
Код:

SecurityError: Error #2123: Security sandbox violation: LoaderInfo.content: http://cs607725.vk.me/u160005943/db9165f031f966.zip cannot access http://vk.com/images/camera_c.gif. No policy files granted access.
        at flash.display::LoaderInfo/get content()
        at com.engine::Friend/setAvatar()

на юзера, который без фотографии. Те друзья, которые с фото - грузятся нормально.

Добавлено через 11 минут
Как это исправить, не подскажете?

Добавлено через 23 минуты
Думаю, в таком случае просто можно проверять url:
Код AS3:

if(url == "http://vk.com/images/camera_c.gif")
{
      useSampleFromLibrary();
}


caseyryan 19.01.2014 22:16

Достаточно просто получение content обернуть в try / catch
Цитата:

Читал уже несколько тем, где вы пропускали аватарки через сервера(меня даже затошнило от этого).
От чего затошнило? От проксирования? В некоторых случаях без этого не обойтись.
У меня есть игра, которая одновременно работает и в вк и в одноклассниках. Там нужно чтобы все игроки могли играть с друг другом не зависимо от того, в какой сети они сидят. Естественно, аватарки они тоже должны видеть у друг друга. Так что тут без проксирования не обойтись. А в одноклассниках там еще и фотка не отдается без открытой сессии. С ними вообще приходится аватарку на своем сервере сохранять, чтобы в контакте она была доступна

ZackMercury 19.01.2014 22:45

Цитата:

От чего затошнило? От проксирования? В некоторых случаях без этого не обойтись.
У меня есть игра, которая одновременно работает и в вк и в одноклассниках. Там нужно чтобы все игроки могли играть с друг другом не зависимо от того, в какой сети они сидят. Естественно, аватарки они тоже должны видеть у друг друга. Так что тут без проксирования не обойтись. А в одноклассниках там еще и фотка не отдается без открытой сессии. С ними вообще приходится аватарку на своем сервере сохранять, чтобы в контакте она была доступна
Кошмар :)

ZackMercury 19.01.2014 22:50

Вложений: 1
Обошелся без try/catch, простым условием на url. Оно не требует запроса к серверу, значит так будет лучше.
Наконец-то, я справился с лентой друзей. Осталось только пару мелочей допилить :)

caseyryan 20.01.2014 06:34

Цитата:

Обошелся без try/catch, простым условием на url.
Туда может и не такая ссылка прийти. try / catch лучше


Часовой пояс GMT +4, время: 13:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.