如果用户想要保存新值, 我需要检查首选项中的用户输入 。 我相信代码是正确的... 因为如果我缓慢地改变数值, 没有任何问题。 如果我改变得太快, 应用程序就会崩溃 。
i 在编辑首选项时使用承诺 () 。 这是太慢的方法吗?
我尝试的是什么呢? 如果用户给出了一个空字符串, 我给出了一个提醒对话框和实习生, 我将前置修改为旧值 。 以下是代码 :
public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
//save settings
static String SMStext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
//-- First get SMStext and save in Strings
SMStext = sp.getString("SMSText", "0");
//SharedPreferences.Editor prefEditor = sp.edit();
sp.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
String smstriggerworderror = "String cannot be empty";
if (key.equals("SMSText")) {
if sp.getString("SMSText", "0").equals(""){
SharedPreferences.Editor prefEditor = sp.edit();
prefEditor.putString("SMSText", SMStext);
prefEditor.commit();
//write current value back to value and refresh interface
SMStext = sp.getString("SMSText", "0");
//Show alert dialog
showdialog(smstriggerworderror);
//finish();
}
//write current value back to value
SMStext = sp.getString("SMSText", "0");
}
private void showdialog(String message) {
//create alertbox
AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
alertbox.setMessage(message);
alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
// Click listener on the neutral button or alert box
public void onClick(DialogInterface arg0, int arg1) {
finish();
}
});
// show the alert box
alertbox.show();
}