2013-10-23 78 views
0

此代碼是否有任何理由不起作用?大多數時候它都可以工作,但如果這是第一次打開應用程序,則不會。當我嘗試調用profileSelected時,ManageBaby1/NewBabyProfile活動中出現NullPointerException。然後,如果我重新打開應用程序並選擇其他按鈕(比如我第一次點擊了babyOneButton,第二次點擊babyTwoButton),一切正常。我甚至可以回去再次點擊babyOneButton,它會正常工作。出於某種原因,按下按鈕時它沒有正確寫入?在按鈕上提交SharedPreferences按

public void babyOneButtonClick(View view) { 

    profileSelected = "babyOne"; 

    if (babyOneProfile.contains("name")) { 
     generalPrefsEditor.putString("profile_selected", profileSelected).commit(); 
     Intent goToManageBaby1 = new Intent(this, ManageBaby1.class); 
     startActivity(goToManageBaby1); 
    } else { 
     generalPrefsEditor.putString("profile_selected", profileSelected).commit(); 
     Intent goToNewBabyProfile = new Intent(this, NewBabyProfile.class); 
     startActivity(goToNewBabyProfile); 
    } 

}

public void babyTwoButtonClick(View view) { 

    profileSelected = "babyTwo"; 

    if (babyTwoProfile.contains("name")) { 
     generalPrefsEditor.putString("profile_selected", profileSelected).commit(); 
     Intent goToManageBaby1 = new Intent(this, ManageBaby1.class); 
     startActivity(goToManageBaby1); 
    } else { 
     generalPrefsEditor.putString("profile_selected", profileSelected).commit(); 
     Intent goToNewBabyProfile = new Intent(this, NewBabyProfile.class); 
     startActivity(goToNewBabyProfile); 
    } 

如果您需要了解更多信息或代碼片段,請讓我知道 - 這已被竊聽了我一段時間,但我一直在它周圍的工作,因爲我不能爲我的生活想出來...

謝謝!

編輯:這裏是ManageBaby1中拋出異常的代碼。

 generalPrefs = getSharedPreferences(getString(R.string.general_preferences), 0); 
    generalPrefsEditor = generalPrefs.edit(); 

    profileSelected = generalPrefs.getString("profile_selected", "profileSelected"); 

    if (profileSelected == "babyOne") { 
     babyProfile = getSharedPreferences(getString(R.string.baby_one_profile), 0); 
    } else if (profileSelected =="babyTwo") { 
     babyProfile = getSharedPreferences(getString(R.string.baby_two_profile), 0); 
    } 

    editor = babyProfile.edit(); 

但是,如果我帶走if語句(即需要profileSelected寫入MainActivity),它始終正常工作。出於某種原因,第一次單擊按鈕時它不起作用。

+0

哪個地方是引發'NullPointerException'?如果可能的話發佈你的logcat! –

+0

我將代碼編輯到我的OP中。例外是指向editor = babyProfile.edit();因爲IF語句不起作用,因爲profileSelected第一次按下按鈕出於某種原因沒有正確寫入。 – tuzion

回答

1

我接過來一看,有一個不錯的主意,我知道問題是什麼地方。當你做第一組profileSelected比較不匹配,因爲你的默認值profileSelected = generalPrefs.getString(「profile_selected」,「profileSelected」);是選中的字符串配置文件。它不等於任一選項,因此BabyProfile永遠不會被分配一個值,因此爲空。

另一個問題是你永遠不應該用==來比較字符串。你應該總是使用String.equals()。即在這種情況下,它將是profileSelected.equals(「babyOne」)。

0

你把這段代碼寫在onCreate

generalPrefsEditor = getSharedPreferences(PREFS_NAME, MODE_WORLD_READABLE); 
SharedPreferences.Editor pref_editor = generalPrefsEditor.edit(); 

我認爲這是你得到NullPointerException

+0

是的,它在那裏。我將代碼編輯到我的OP中。但是,如果我拿走if語句(這需要profileSelected寫在MainActivity中),它始終可以正常工作。出於某種原因,第一次單擊按鈕時它不起作用。 – tuzion