2013-10-10 25 views
0

我很新到Java/Android開發,我想簡單地擁有用戶檢查「男孩」或「女孩」單選按鈕,並將它寫入SharedPreferences如此我可以在其他活動中使用它。每當我嘗試打開這個活動,但我的應用程序只是崩潰。編輯SharedPreferences

public class NewBabyProfile extends Activity { 

String GENDER = "Baby1Gender"; 

// SharedPreferences initializations 
SharedPreferences babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = babyOneGender.edit(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_baby_profile); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.new_baby_profile, menu); 
    return true; 
} 

public void onRadioButtonClicked(View genderSelection){ 
    boolean checked = ((RadioButton) genderSelection).isChecked(); 

    switch(genderSelection.getId()) { 
     case R.id.gender_boy: 
      if (checked) 
       editor.putString("gender","boy").commit(); 
      break; 

     case R.id.gender_girl: 
      if (checked) 
       editor.putString("gender","girl").commit(); 
      break; 

    } 
} 

} 
+0

你能搬出'初始化'OnCreate'方法內的babyOneGender'和'editor',看看會發生什麼? –

+0

當我在下面的切換中執行「編輯器無法解析」的錯誤時。 – tuzion

+0

請從日誌 –

回答

0

不能直接初始化類中的以下兩種。

SharedPreferences babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = babyOneGender.edit(); 

你的SharedPreferences初始化應該像的onCreate方法內發生的()或的onResume() 遷入的onCreate(捆綁)和你的應用程序,這將不會再崩潰。另外,請檢查您的logcat,找出自己的問題:)

最終代碼: -

public class NewBabyProfile extends Activity { 

String GENDER = "Baby1Gender"; 

//Global declaration. 
SharedPreferences babyOneGender; 
SharedPreferences.Editor editor; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_baby_profile); 

    //Initializations inside onCreate() so no error. 

    babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE); 
    editor = babyOneGender.edit(); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.new_baby_profile, menu); 
    return true; 
} 

public void onRadioButtonClicked(View genderSelection){ 
    boolean checked = ((RadioButton) genderSelection).isChecked(); 

    switch(genderSelection.getId()) { 
     case R.id.gender_boy: 
      if (checked) 
       editor.putString("gender","boy").commit(); 
      break; 

     case R.id.gender_girl: 
      if (checked) 
       editor.putString("gender","girl").commit(); 
      break; 

    } 
} 

} 
+0

這是否在全球範圍對其進行初始化的?看來我通常把他們的onCreate當我嘗試它們沒有定義和onRadioButtonClicked(使用它們)。如果我使用了一些不正確的術語和感謝對不起幫助! – tuzion

+0

更新了全球的初始化:) –

+0

您全局聲明變量,但在初始化的onCreate他們()。這不會導致問題:) –

0

試試這個

SharedPreferences babyOneGender = getApplication().getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE); 
+0

仍然崩潰:( – tuzion

0

babyOneGender &編輯的舉動初始化的onCreate:

SharedPreferences babyOneGender; 
    SharedPreferences.Editor editor; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_new_baby_profile); 

     babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE); 
     editor = babyOneGender.edit(); 
+0

這似乎已經奏效!有沒有什麼辦法可以真正確認它編輯了SharedPreferences文件?我沒有固定電話,因此我無法在/ data中查看XML文件。 – tuzion

+0

您可以在Android模擬器上進行測試,您可以在其中查看任何文件的根權限。 – yushulx