У меня есть класс remoteobject, который обрабатывает все интерактивные с моей удаленной службой данных.Каждый раз, когда выполняется вызов, служба данных проверяет, что у пользователя есть действительный сеанс.если они этого не сделают, он не запустит запрошенный метод и вернет ошибку.Я могу зафиксировать эту ошибку в обработчике ошибок.Что я хочу сделать, если это произойдет, это нажать на экран входа в систему пользователю.
Я пробовал следующее
var navigator:ViewNavigator;
navigator.activeView.navigator.pushView(views.LoginScreen);
Но это не работает и не удается с Не удается получить доступ к свойствуили метод нулевой ссылки на объект.что имеет смысл.поэтому мой вопрос заключается в том, как я могу получить ссылку на текущий запущенный объект навигатора представления и выдвинуть представление?
Спасибо
Как запрошено здесь, это полный класс удаленного объекта
пакет удаленного взаимодействия {import events.RemoteExceptionEvent;
import flash.events.*;
import mx.managers.CursorManager;
import mx.messaging.ChannelSet;
import mx.messaging.channels.AMFChannel;
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.RemoteObject;
import spark.components.ViewNavigator;
import views.FirstTime.ValidateUser;
/**
* Super class for all remote services that contains some generic methods.
*/
public class RemoteService extends EventDispatcher
{
private static var REMOTE_EXCEPTION:String = "Remote exception";
private static var NO_MESSAGE:String = "10001";
protected var remoteObject:RemoteObject;
private var amfChannelSet:ChannelSet;
/**
* Constructor accepting an id and destination for the actual RemoteObject to create. An event listener
* is added for exceptions.
* @param id String representing the id of the new RemoteObject to create
* @param destination String representing the destination of the RemoteObject to create
* @param amfChannelId String representing the Channel of the RemoteObject to create
* @param amfChannelEndpoint String representing the Endpoint URI of the RemoteObject to create
*/
public function RemoteService( serviceId:String
, serviceDestination:String
, amfChannelId:String
, amfChannelEndpoint:String
)
{
// Create a runtime Channelset for given Channel ID and Endpoinr URI
var amfChannel:AMFChannel = new AMFChannel(amfChannelId, amfChannelEndpoint);
amfChannelSet = new ChannelSet();
amfChannelSet.addChannel(amfChannel);
// Create the remoteObject instance
this.remoteObject = new RemoteObject(serviceId);
this.remoteObject.channelSet = amfChannelSet;
this.remoteObject.destination = serviceDestination;
this.remoteObject.addEventListener(FaultEvent.FAULT,onRemoteException);
this.remoteObject.setCredentials('test','test');
}
/**
* generic fault event handler for all remote object actions. based on the received message/code an action
* is taken, mostly throwing a new event.
* @param event FaultEvent received for handling
*/
public function onRemoteException(event:FaultEvent):void {
trace('code : ' + event.fault.faultCode +
', message : ' + event.fault.faultString +
',detail : ' + event.fault.faultDetail);
trace('fodun: ' + event.fault.faultDetail.indexOf("Authentication"));
if (event.fault.faultDetail.indexOf("Authentication") > 0)
{
var navigator:ViewNavigator;
navigator.activeView.navigator.pushView(views.LoginScreen);
}
else if (event.fault.faultString == REMOTE_EXCEPTION) {
EventDispatcher(
new RemoteExceptionEvent(RemoteExceptionEvent.REMOTE_EXCEPTION,
"unknown problem occurred during a remote call : " + event.fault.message));
} else if (event.fault.faultCode == NO_MESSAGE) {
EventDispatcher(
new RemoteExceptionEvent(RemoteExceptionEvent.REMOTE_EXCEPTION,
event.fault.faultString));
} else {
EventDispatcher((
new RemoteExceptionEvent(RemoteExceptionEvent.REMOTE_EXCEPTION,
"unknown runtime problem occurred during a remote call : " + event.fault.message)));
}
}
}
}