2011-06-21 6 views
0

私はアプリケーションのcreationCompleteで実行される関数initを持っています。 initはオブジェクトが作成されるget_login_share_object関数を呼び出します。これはnullです。ヌルオブジェクト参照エラーを回避するには

私の問題は、 "init()"のAlertでnullオブジェクト参照エラーが発生することです。どのように私はそれを避けることができます。オブジェクトが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; 
     } 

答えて

3

あなたはこのようなヌルをチェックすることもできます

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

あなたはそれらの値がnullである理由を見つけると最初にこれを修正する必要があります。一般に、値を期待している場合は、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 
} 
1

あなたの問題はここにある:

var dataToLoad:ByteArray = so.data.ws_creds; 
if(!dataToLoad) 
    return null; 

ロードするデータがない場合、nullが返されます。したがって、返されたオブジェクトのプロパティに後でアクセスしようとすると、nullオブジェクトを参照しているため、nullオブジェクト参照エラーが発生します。 :)

これには簡単な解決法がいくつかあります。

if (stored_credentials != null) { 
    Alert.show(stored_credentials.check_remember +" "+ stored_credentials.alias +" "+ stored_credentials.password); 
} 

それとも、あなたのget_login_share_object関数からヌルを返して停止することができます:あなたがそうのような任意のプロパティを参照しようとする前に、戻り値がnullであるかどうかを確認できます。代わりに返すものはあなた次第です。あなたが参照しているすべてのプロパティを持つオブジェクトを返すようにしてください。

関連する問題