2011-06-27 138 views
0

我想在PreferenceActivity中使用sharedpreferences,但不幸的是它强制关闭。部分:Android sharedpreferences强制关闭

public class EditPreferences extends PreferenceActivity { 

String ListPreference; 
boolean CheckboxPreference; 
SharedPreferences mprefs; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 


final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref"); 

checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {    
public boolean onPreferenceChange(Preference preference, Object newValue) { 
    if (newValue.toString().equals("true")) 
    { 
     Toast.makeText(getApplicationContext(), "CB: " + "true", Toast.LENGTH_SHORT).show(); 
     SharedPreferences.Editor edit = mprefs.edit(); 
     edit.putString("cbstate", "true"); 
     edit.commit(); 
    } 
    else 
    { 
     Toast.makeText(getApplicationContext(), "CB: " + "false", Toast.LENGTH_SHORT).show(); 
    SharedPreferences.Editor edit = mprefs.edit(); //this line force closes 
     edit.putString("cbstate", "false"); 
     edit.commit(); 
    } 
    return true; 
} 

});

代码有什么问题? 谢谢, 乙

+1

是否有任何有价值的信息在崩溃期间显示在logcat中,您可以与我们分享? –

回答

1

它看起来并不像mprefs是曾经分配一个值(除非它的发生在其他地方)

+0

这是缺少的:mprefs = this.getSharedPreferences(“mprefs”,MODE_WORLD_READABLE); – erdomester

1

你应该看一下日志,看看异常的堆栈爬行,它告诉你为什么你的代码崩溃了。

我不会将此作为澄清问题添加,因为堆栈爬网未包含在问题中的事实强烈表明您没有真正查看它,如果是这种情况,那么回答你的问题,解决你的问题的最可能的办法是去看看,看看它为什么说你崩溃了。