我有函数init,它运行在应用程序的creationComplete上。 init调用get_login_share_object函数,其中创建了对象,这些对象为null。
现在我的问题是,我在“init()”中的Alert上得到一个空对象引用错误。我怎么能避免这种情况。是否有可能我可以检查一下,如果对象为null,程序应该跳过读取对象。
private function init():void
{
var stored_credentials:Object = get_login_share_object();
Alert.show(stored_credentials.check_remember +" "+ stored_credentials.alias +" "+ stored_credentials.password );
}
private function get_login_share_object():Object
{
//create or retrieve the current shared object
var so:SharedObject = SharedObject.getLocal("loginData","/");
var dataToLoad:ByteArray = so.data.ws_creds;
if(!dataToLoad)
return null;
//read in our key
var aes_key:String = ServerConfig.aes_key;
var key:ByteArray = new ByteArray();
key = Base64.decodeToByteArray(aes_key);
//read in our encryptedText
var encryptedBytes:ByteArray = new ByteArray();
dataToLoad.readBytes(encryptedBytes);
//decrypt using 256b AES encryption
var aes:ICipher = Crypto.getCipher("simple-aes128-ctr", key, Crypto.getPad("pkcs5"));
aes.decrypt(encryptedBytes);
encryptedBytes.position = 0;
var obj:Object = new Object();
obj.alias = encryptedBytes.readUTF();
obj.password = encryptedBytes.readUTF();
obj.check_remember = encryptedBytes.readUTF();
return obj;
}
答案 0 :(得分:3)
您可以像这样检查null:
var stored_credentials:Object = get_login_share_object();
if (stored_credentials)
Alert.show(stored_credentials.check_remember +" "+ stored_credentials.alias +" "+ stored_credentials.password );
else
trace('No Shared Object');
答案 1 :(得分:1)
您应该找出这些值为空的原因并首先修复它。一般来说,如果您期望一个值,它不应该为空。
如果真的预计其中一些值为null,那么您可以先用两种方式检查它们:
if(value != null) value.doSomething();
或
try{
Alert.show(stored_credentials.check_remember +" "+ stored_credentials.alias +" "+ stored_credentials.password );
}
catch(e:Error){
// do something else here if the statement under the try failed.
// most likely log the error message and see what it is
}
答案 2 :(得分:1)
你的问题在这里:
var dataToLoad:ByteArray = so.data.ws_creds;
if(!dataToLoad)
return null;
如果没有要加载的数据,则返回null。因此,当您稍后尝试访问返回的对象的属性时,您将获得空对象引用错误,因为您正在引用空对象。 :)
这有几个简单的解决方案。在尝试引用任何属性之前,您可以检查返回值是否为null:
if (stored_credentials != null) {
Alert.show(stored_credentials.check_remember +" "+ stored_credentials.alias +" "+ stored_credentials.password );
}
或者您可以停止从get_login_share_object函数返回null。你返回的内容完全取决于你,只要确保它返回一个包含你所引用的所有属性的对象。