2013-03-22 202 views
1

我有IsolatedStorage文件。如果文件存在,我想重定向到登錄頁面或創建帳戶頁面。的Windows Phone 8 - 導航錯誤

如果犯規存在的文件,應用程序進入到頁面,將密碼創建並保存,和應用程序重定向到登錄頁面。但是,如果IsolatedStorage中的文件存在,它不會直接。

private void fileExists() 
     { 
      IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication(); 
      if (store.FileExists("passwordFile")) 
      { 
       //NavigationService.Navigate(new Uri("/Login.xaml", UriKind.Relative)); 
       MessageBox.Show("Should be redirecting here"); 
      } 

      else 
      { 
       MessageBox.Show("Welcome. Please create an account. Ensure that you remember your password!"); 
      } 
     } 

實際的消息做節目,所以它被稱爲如果一個文件不存在,則執行別的,所以我的邏輯是合理的。

FileExists()功能這裏所說的。

public MainPage() 
     { 
      InitializeComponent(); 
      fileExists(); 
     } 

其他重定向發生在這裏

if ((password1.Password == password2.Password) & (password1.Password.Trim().Length > 0 || password2.Password.Trim().Length > 0)) 
      { 
       byte[] PasswordByte = Encoding.UTF8.GetBytes(password1.Password); 
       byte[] ProtectedPassword = ProtectedData.Protect(PasswordByte, null); 
       this.WritePasswordToFile(ProtectedPassword); 

       NavigationService.Navigate(new Uri("/Login.xaml", UriKind.Relative)); 
      } 

錯誤是System.NullReferenceException但在用戶代碼中沒有處理。

+0

真正offtopic在這裏,請散列或加密你的密碼文件,具有一些奇特的編碼和改裝WP8很容易訪問isolatedStorage – EaterOfCode 2013-03-22 10:41:35

+1

我會的,這是真的只是開始!我剛開始的C#和WP昨天和加密的項目,而不是東西,我會看幾個星期的很大一部分。雖然謝謝! – 2013-03-22 10:44:57

回答

1

曾試圖調用該文件存在檢查負載的MainPage?這可能是存儲準備問題,即使它正在執行。其次,如果你可以提到發生確切的異常的地方。也請檢查這個link,這可能會幫助你。

+0

該文件肯定存在。如果我註釋掉導航部分,它將返回true並顯示一個消息框,所以文件肯定存在。 導航線處的fileExists()函數發生異常(註釋如上) 我將通過該鏈接看看,看起來不錯,但邏輯上,我無法弄清楚爲什麼它應該導致異常的地方,而不是其他地方,特別是其他代碼運行良好時。 – 2013-03-22 10:47:54

+0

也試着把檢查代碼放在頁面的加載事件中。 – 2013-03-22 10:53:29

1

的問題是,NavigationService仍然是空,你可以通過把一個斷點重定向行驗證, 把同樣的代碼在MainPage.Loaded事件,它會工作的話,(我期望它的工作再)

因爲我希望這只是一個重定向頁面,您可以檢查該文件中的初始化和保存URI在類重定向並在頁面加載

0

重定向我需要從移動FILEEXISTS()構造函數到一個新的函數。

protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      base.OnNavigatedTo(e); 
      fileExists(); 
     }