Вход

Просмотр полной версии : HTTPService ошибка EventDispatcher


Chibis
04.06.2009, 21:06
Почему при определении myXML = e.result as XML вылезает ошибка? Помогите разобраться или хотябы намекните в какую сторону копать и как побороть
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">

<mx:Script>
<![CDATA[
import mx.controls.Alert
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import api.*;

public var apiArray:Array = new Array()
public var qapi:Array = new Array()
public var sig:String;
public var strPHP:String;
public var myXML:XML;



private function init():void {
qapi[0] = loaderInfo.parameters["api_id"];
qapi[1] = loaderInfo.parameters["user_id"];
qapi[2] = loaderInfo.parameters["group_id"];
qapi[3] = loaderInfo.parameters["viewer_id"];
qapi[4] = loaderInfo.parameters["is_app_user"];
qapi[5] = loaderInfo.parameters["viewer_type"];
qapi[6] = loaderInfo.parameters["auth_key"];



sig = MD5.encrypt(qapi[3]+'api_id='+qapi[0]+'fields=uid,first_name,last_name,nickname,sex,bdate,city,country,timezone,photo,photo_medium,photo_big'+'method=getProfiles'+'uids='+qapi[3]+'v=2.0ogBm5BsiUL')
strPHP = "http://api.vkontakte.ru/api.php?api_id="+qapi[0]+"&v=2.0&method=getProfiles&sig="+sig+"&uids="+qapi[3]+"&fields=uid,first_name,last_name,nickname,sex,bdate,city,country,timezone,photo,photo_medium,photo_big"
apiConect.url= strPHP
apiConect.addEventListener(ResultEvent.RESULT, resultApiConect)
apiConect.send()



}

public function resultApiConect(e:ResultEvent):void
{
myXML = e.result as XML;
Alert.show(myXML.toXMLString())
}

]]>
</mx:Script>
<mx:HTTPService id="apiConect"/>

</mx:Application>


TypeError: Error #1009: Cannot access a property or method of a null object reference.
at new_pro/new_pro::init()[C:\Documents and Settings\Admin\My Documents\Flex Builder 3\new_test\src\new_pro.mxml:20]
at new_pro/___new_pro_Application1_creationComplete()[C:\Documents and Settings\Admin\My Documents\Flex Builder 3\new_test\src\new_pro.mxml:2]
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:9298]
at mx.core::UIComponent/set initialized()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:1169]
at mx.managers::LayoutManager/mx.managers:LayoutManager::doPhasedInstantiation()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:718]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/mx.core:UIComponent::callLaterDispatcher2()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8628]
at mx.core::UIComponent/mx.core:UIComponent::callLaterDispatcher()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8568]

GBee
04.06.2009, 21:55
У Вас ошибка в init вылезает, вы обращаетесь к чему-то несуществующему (loaderInfo != null?)

wvxvw
04.06.2009, 22:13
Заменить loaderInfo.parameters на parameters. Очевидно Application зачем-то оверрайдит loaderInfo из-за чего это свойство у вас остается неопределенным после инициализации.
Еще вариант - подпишитесь на applicationComplete - не знаю толком в чем именно разница, но лучше делать так.
Ну и кроме всего прочего - не используйте подчерки в именах классов и ставьте точку с запятой в конце строки.

Chibis
04.06.2009, 23:45
подписался applicationComplete изменил loaderInfo.parameters на parameters, всеравно говорит что null сделал так
qapi[0] = Application.application.parameters.api_id;
qapi[1] = Application.application.parameters.user_id;
qapi[2] = Application.application.parameters.group_id;
qapi[3] = Application.application.parameters.viewer_id;
qapi[4] = Application.application.parameters.is_app_user;
qapi[5] = Application.application.parameters.viewer_type;
qapi[6] = Application.application.parameters.auth_key;
может можно отследить как нибудь загрузку флешварс?

wvxvw
05.06.2009, 03:23
А теперь потрейсте:
trace( Application.application === this );
Должны быть изначально, а вообще, еще попробуйте такой вариант:
root.loaderInfo.parameters
Просто в SystemManger за каким-то лешим это свойство оверрайдят - вот и получаются из-за этого неприятности.

Chibis
05.06.2009, 10:45
так все работает)))
private function init():void
{
for (var i:String in Application.application.parameters) {
qapi.push(Application.application.parameters[i])
}

etc
05.06.2009, 11:20
Стек прямо указывает на то, что ошибка в init(), а не в HTTPService.