Вопрос о JSON.

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Закрыто
2rist
Сообщения: 3
Зарегистрирован: 20 фев 2010, 12:24

Вопрос о JSON.

Сообщение 2rist »

Собственно Вконтакте может отдавать данные в формате XML и JSON. Поскольку принципиальной разницы между ними нет(данные одни и те же на выходе) решил поиграться с JSON. Последний мне понравился за большую лаконичность и меньший размер передаваемых данных.
Взял базовое приложение(выдираем информацию о пользователе запустившем приложение), которое здесь выкладывалось, и попробовал его переписать с поправкой на JSON.

Код: Выделить всё

    package {       import flash.display.Loader;    import flash.display.LoaderInfo;    import flash.display.Sprite;    import flash.events.Event;    import flash.net.URLLoader;    import flash.net.URLRequest;    import flash.text.TextField;            import utils.MD5;    import com.adobe.serialization.json.JSON;     public class Main extends Sprite {        private static const APP_ID:uint = 12345; // id вашего приложения        private static const APP_SECRET:String = "supercode"; // секретный ключ        private static const MY_ID:uint = 12345;        private var loader:URLLoader = new URLLoader();        private var viewer_id:uint;        private var sig:String;        private var nameTxt:TextField = new TextField();        private var nicknameTxt:TextField = new TextField();         public function Main():void         {            if (stage) init();            else addEventListener(Event.ADDED_TO_STAGE, init);        }                private function init(e:Event = null):void         {            removeEventListener(Event.ADDED_TO_STAGE, init);                        var params:Object = LoaderInfo(root.loaderInfo).parameters;            viewer_id = (params['viewer_id']) ? parseInt(params['viewer_id']) : MY_ID;            getProfile(viewer_id);        }            private function getProfile(uid:uint):void         {               // Формируем sig - подпись запроса            // Пример: sig = md5(viewer_idname1=value1name2=value2secret)            sig = MD5.encrypt(viewer_id+"api_id"+APP_ID+"method=getProfilesfields=nicknameuids=" + uid + "format=JSONv=2.0" + APP_SECRET);            // Отправляем запрос к Вконтакте API            var request: URLRequest = new URLRequest("http://api.vkontakte.ru/api.php?api_id=" + APP_ID + "&method=getProfiles&uids=" + uid + "&fields=nickname&format=JSON&v=2.0&sig=" + sig);            loader.addEventListener(Event.COMPLETE, onLoaderComlete);            loader.load(request);        }         private function onLoaderComlete(e:Event):void         {            loader.removeEventListener(Event.COMPLETE, onLoaderComlete);            nicknameTxt.text = "";            if (loader.data != null) {                var jsonObj:* = JSON.decode(loader.data);                var res:Array = jsonObj.response;                var nickname:String = res[0].nickname;                nicknameTxt.text = nickname;                nicknameTxt.x = 490;                nicknameTxt.y = 380;                addChild(nicknameTxt);                                var name:String = res[0].first_name + ' ' + res[0].last_name;                nameTxt.text = name;                nameTxt.x = 450;                nameTxt.y = 300;                addChild(nameTxt);            } else {                trace("Error");            }        } 
При компиляции во FlashDevelov-ре выдается 1009 ошибка:

Код: Выделить всё

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".    at Main/onLoaderComlete()    at flash.events::EventDispatcher/dispatchEventFunction()    at flash.events::EventDispatcher/dispatchEvent()    at flash.net::URLLoader/onComplete() 
Такая же ошибка выдается и при компиляции приложения с XML, но после загрузки его на сайт - оно работает, а мое нет...

Написал небольшой пример, который просто обрабатывает данные в формате JSON, без обращения к Вконтакте.API - он работает.

Код: Выделить всё

         // Пример работы с JSON:                       var jsonString:String = '{"response":[{"uid":12345,"first_name":"Виталий","last_name":"Михайлов","nickname":"plushkin98rus"}]}';                var jsonObj:* = JSON.decode(jsonString);                var res:Array = jsonObj.response;                var nickname:String = res[0].nickname;                  nicknameTxt.x = 490;                nicknameTxt.y = 380;                                nicknameTxt.text = nickname;                addChild(nicknameTxt);             
В общем второй день ума не приложу, в чем проблем, спасайте)
Последний раз редактировалось 2rist 02 мар 2010, 11:15, всего редактировалось 1 раз.
2rist
Сообщения: 3
Зарегистрирован: 20 фев 2010, 12:24

Re: Вопрос о JSON.

Сообщение 2rist »

Может подскажите хотя бы где описания ошибок почитать?)
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Вопрос о JSON.

Сообщение Александр »

2rist писал(а):Может подскажите хотя бы где описания ошибок почитать?)
Прямо в яндекс или гугл пиши свою ошибку. Наверняка кто-то с ней сталкивался.

Пробуй выводить куда-нибудь полученный JSON ответ. Если ответ приходит нормальный, то проблема в обработке, если не приходит правильный ответ, то нужно разбираться с этим.
2rist
Сообщения: 3
Зарегистрирован: 20 фев 2010, 12:24

Re: Вопрос о JSON.

Сообщение 2rist »

Проблема решилась.Все оказалось проще - опечатался здесь:

Код: Выделить всё

sig = MD5.encrypt(viewer_id+"api_id"+APP_ID+"method=getProfilesfields=nicknameuids=" + uid + "format=JSONv=2.0" + APP_SECRET);
После api_id равно не поставил)
Ужс... ненавижу такие ошибки.

Можно закрыть тему.
Закрыто