0

如果他们想保存新值,我需要检查首选项中的用户输入。我相信代码是正确的......因为如果我慢慢改变值,那根本没有问题。如果我更改得太快,应用程序就会崩溃。

我正在使用 commit() 来编辑首选项。这是一个太慢的方法吗?

我在尝试什么?:如果用户给出了一个空字符串,我会给出一个警告对话框,实习生我会将 pref 改回旧值。这是代码:

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();      
}
4

1 回答 1

0

onSharedPreferenceChanged你这样做的过程中,prefEditor.commit();这将调用onSharedPreferenceChanged监听器,然后它会commit()一遍又一遍地调用,直到...... StackOverFlow 错误

使固定:

不要在 OnSharedPreferencesChanged 侦听器中更改您的 SharedPreferences。

于 2012-05-22T21:11:49.347 回答