如何解决如何避免空对象引用错误
| 我有函数init,它在应用程序的creationComplete上运行。初始化调用get_login_share_object函数,在该函数中创建对象,这些对象为null。 现在我的问题是,我在\“ init()\”中的Alert上收到空对象引用错误。我如何避免这种情况。我是否可以检查一下,如果对象为空,则程序应该跳过读取对象。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;
}
解决方法
您可以像这样检查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\');
, 您应该找出这些值为何为null的原因,然后首先解决该问题。一般来说,如果期望值,则该值不应为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
}
, 您的问题在这里:
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。相反,您返回的内容完全取决于您,只需确保它返回一个包含您所引用的所有属性的对象即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。