![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 27
|
Когда пытаюсь скомпилировать любое приложение с использованием API выскакивает ошибка
(пишу в FlashDevelop). Ошибка в файле DataProvider.as. Вот его код места ошибки: (4 строка) loader.addEventListener(Event.COMPLETE, function(e:Event):void{ var loader:URLLoader = URLLoader(e.target); trace(loader.data); var data: Object = JSON.decode(loader.data); if (data.error) { options.onError(data.error); } else if (options.onComplete && data.response) { options.onComplete(data.response); } }); try { loader.load(request); } catch (error:Error) { options.onError(error); } } Вот еще код самой программы (Пытался скомпилировать пример из инета, но и все остальные программы ту же ошибку выдавали) package { import flash.display.Sprite; import flash.events.*; import vk.APIConnection; import vk.events.*; public class Main extends Sprite { public var api_id:Number; public var viewer_id:Number; public var sid:String; public var secret:String; public function Main() { // получаем flashVars var flashVars:Object = stage.loaderInfo.parameters as Object; // присваиваем переменным значения из flashVars api_id = flashVars['api_id']; viewer_id = flashVars['viewer_id']; sid = flashVars['sid']; secret = flashVars['secret']; // для тестирования локально, вводим свои данные здесь и раскоменчиваем код /*flashVars['api_id'] = 1728947; flashVars['viewer_id'] = 1306422; flashVars['sid'] = 'a1006fd1e8gb9bd669e1119280166bc6cb9110b8a111550333bf041301'; flashVars['secret'] = '7ef8l6a4p8'; */ // инициализация var VK:APIConnection = new APIConnection(flashVars); // выполняем запрос getProfiles, в качестве параметра uids используем id пользователя, просматривающего приложения, в параметре fields указываем photo_big - большая фотография пользователя VK.api('getProfiles', { uids: flashVars['viewer_id'],fields:'photo_big' }, onProfileLoaded, onError); } // данные получены private function onProfileLoaded(data: Object):void { // обрабатываем полученный ответ data.result_tf.text = data[0]['uid'] + ' ' + data[0]['first_name'] + ' ' + data[0]['last_name'] + ' ' + data[0]['photo_big']; } // если произошла ошибка private function onError(data: Object):void { data.result_tf.text = data.error_msg; } } } |
|
|||||
|
Компилятор же явно указал на ошибку.
Класс JSON надо сначала импортировать Вообще, FD умеет сама хорошо импортировать разные классы. Но если этого, по какой-то причине, не произошло автоматически (возможно из-за копипаста кода), то нужно установить курсор на название класса, который нужно импортировать и нажать Ctrl + Shift + 1 |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 27
|
но в нем уже существует импорт
Вообще вот листинг всего класса API package vk.api { import flash.net.*; import flash.errors.*; import flash.events.*; import vk.api.serialization.json.*; public class DataProvider { private var _api_sid: String; private var _api_url: String = "http://api.vkontakte.ru/api.php"; private var _api_id: Number; private var _api_secret: String; private var _viewer_id: Number; private var _request_params: Array; private var _global_options: Object; public function DataProvider(api_url: String, api_id: Number, api_sid: String, api_secret: String, viewer_id: Number) { _api_secret = api_secret; _api_sid = api_sid; _api_url = api_url; _api_id = api_id; _viewer_id = viewer_id; } public function setup(options: Object): void { _global_options = options; } public function request(method: String, options: Object = null):void { var onComplete: Function, onError: Function; if (options == null) { options = new Object(); } options.onComplete = options.onComplete ? options.onComplete : (_global_options.onComplete ? _global_options.onComplete : null); options.onError = options.onError ? options.onError : (_global_options.onError ? _global_options.onError : null); _sendRequest(method, options); } /******************** * Private methods ********************/ private function _sendRequest(method:String, options:Object):void { var self:Object = this; var request_params: Object = {method: method}; request_params.api_id = _api_id; request_params.format = "JSON"; request_params.v = "3.0"; if (options.params) { for (var i: String in options.params) { request_params[i] = options.params[i]; } } var variables:URLVariables = new URLVariables(); for (var j: String in request_params) { variables[j] = request_params[j]; } variables['sig'] = _generate_signature(request_params); variables['sid'] = _api_sid; var request:URLRequest = new URLRequest(); request.url = _api_url; request.method = URLRequestMethod.POST; request.data = variables; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; if (options.onError) { loader.addEventListener(IOErrorEvent.IO_ERROR, function():void { options.onError("Connection error occured"); }); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function():void { options.onError("Security error occured"); }); } loader.addEventListener(Event.COMPLETE, function(e:Event):void{ var loader:URLLoader = URLLoader(e.target); trace(loader.data); var data: Object = JSON.decode(loader.data); if (data.error) { options.onError(data.error); } else if (options.onComplete && data.response) { options.onComplete(data.response); } }); try { loader.load(request); } catch (error:Error) { options.onError(error); } } /** * Generates signature * */ private function _generate_signature(request_params: Object): String { var signature: String = ""; var sorted_array: Array = new Array(); for (var key: String in request_params) { sorted_array.push(key + "=" + request_params[key]); } sorted_array.sort(); // Note: make sure that the signature parameter is not already included in // request_params array. for (key in sorted_array) { signature += sorted_array[key]; } if (_viewer_id > 0) signature = _viewer_id.toString() + signature; signature += _api_secret; return MD5.encrypt(signature); } } } |
|
|||||
|
Помнится был у меня как-то конфликт классов, когда адоби на кой-то добавили нативный класс JSON во флеш плеер.
Я просто переименовал все классы сожержащие JSON в директории APIConnection. Т.е. сделал JSON -> Json Во вложении уже переименованные классы. Возможно тут та же проблема так же можно вместо прописать полный путь чисто для проверки |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 27
|
спасибо большое, когда прописал полный путь все заработало.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 02:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|