Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.08.2012, 16:46
AntiVIRUZ вне форума Посмотреть профиль Отправить личное сообщение для AntiVIRUZ Найти все сообщения от AntiVIRUZ
  № 1  
Ответить с цитированием
AntiVIRUZ

Регистрация: Jan 2012
Сообщений: 27
Attention Ошибка в API при компиляции приложения.

Когда пытаюсь скомпилировать любое приложение с использованием API выскакивает ошибка
Код:
col: 22 Error: Access of undefined property JSON.
(пишу в FlashDevelop). Ошибка в файле DataProvider.as. Вот его код места ошибки: (4 строка)
Код AS3:
      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);
      }
    }
Что с этим делать?

Вот еще код самой программы (Пытался скомпилировать пример из инета, но и все остальные программы ту же ошибку выдавали)

Код AS3:
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;
        }
    }
}

Старый 14.08.2012, 16:55
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Компилятор же явно указал на ошибку.
Класс JSON надо сначала импортировать
Код AS3:
import vk.api.serialization.json.JSON;
Вообще, FD умеет сама хорошо импортировать разные классы. Но если этого, по какой-то причине, не произошло автоматически (возможно из-за копипаста кода), то нужно установить курсор на название класса, который нужно импортировать и нажать Ctrl + Shift + 1

Старый 14.08.2012, 17:04
AntiVIRUZ вне форума Посмотреть профиль Отправить личное сообщение для AntiVIRUZ Найти все сообщения от AntiVIRUZ
  № 3  
Ответить с цитированием
AntiVIRUZ

Регистрация: Jan 2012
Сообщений: 27
но в нем уже существует импорт

Код:
import vk.api.serialization.json.*;
Вообще вот листинг всего класса API

Код AS3:
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);
    }
  }
}

Старый 14.08.2012, 17:49
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Помнится был у меня как-то конфликт классов, когда адоби на кой-то добавили нативный класс JSON во флеш плеер.
Я просто переименовал все классы сожержащие JSON в директории APIConnection. Т.е. сделал JSON -> Json
Во вложении уже переименованные классы. Возможно тут та же проблема

так же можно вместо
Код AS3:
JSON.decode(loader.data)
прописать полный путь
Код AS3:
vk.api.serialization.json.JSON.decode(loader.data)
чисто для проверки
Вложения
Тип файла: zip json.zip (16.2 Кб, 96 просмотров)

Старый 14.08.2012, 17:58
AntiVIRUZ вне форума Посмотреть профиль Отправить личное сообщение для AntiVIRUZ Найти все сообщения от AntiVIRUZ
  № 5  
Ответить с цитированием
AntiVIRUZ

Регистрация: Jan 2012
Сообщений: 27
спасибо большое, когда прописал полный путь все заработало.

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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