2011-08-16 120 views
0

每次用戶從選項菜單中選擇「註銷」(R.Id.logout)時,都會收到空指針異常。我無法弄清楚我沒有初始化什麼。清除共享首選項會拋出空指針異常

@Override 
     public boolean onOptionsItemSelected(MenuItem item) 
     { 
      switch (item.getItemId()) 
      { 
       case R.id.settings:    
        return false; 
       case R.id.about: 
        this.startActivity(new Intent(this, About.class)); 
        return true; 
       case R.id.logout: 
        AlertDialog.Builder alertbox = new AlertDialog.Builder(this); 
        alertbox.setTitle("Logout"); 
        alertbox.setMessage("Logging out will remove your credentials from this phone. \nDo you want to logout?"); 
        alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
        {     
         public void onClick(DialogInterface dialog, int id) 
         { 
          Editor e = loginPref.edit(); 
          e.clear(); 

          Homepage.this.startActivity(new Intent(getApplicationContext(), Login.class)); 
          Homepage.this.finish();    
         } 
        }); 
        alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() 
        {     
         public void onClick(DialogInterface dialog, int id) 
         { 
          dialog.cancel();      
         } 
        }); 
        AlertDialog alert = alertbox.show(); 
        return true; 
      } 
      return false; 
     } 

logcat的

08-16 10:09:49.705: ERROR/AndroidRuntime(1531): FATAL EXCEPTION: main 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531): java.lang.NullPointerException 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at org.*****.android.Homepage$1.onClick(Homepage.java:79) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at android.os.Looper.loop(Looper.java:123) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):  at dalvik.system.NativeStart.main(Native Method) 
+0

你能顯示你的logcat錯誤細節,那麼我們可以知道你可以在哪裏得到空指針例外,或請檢查logcat並對該行發表評論 – Pratik

+0

你在哪裏清除它....? – ngesh

+0

可以顯示logcat ... –

回答

0

這是相當簡單的。 Homepage.java第79行的內容爲空。請檢查這是什麼行,並張貼或張貼完整的代碼,包名和所有內容,以便我們實際上可以提供幫助,因爲現在我們只能猜測實際上是空的。

Editor e = loginPref.edit(); 

你有沒有初始化loginPref:

我的第一個猜測將在被loginPref?

+0

nope這是問題loginPref = getSharedPreferences(PREFS_NAME,0); – JonWells