0

I know this has been asked a lot around SO, but I just can't seem to get this working. Situation : I have a dialog with a EditText in it with an accept button. I would like to store the value of the string with SharedPreferences when the user touch the accept button. Here's the code I have so far.

public void showDialog()
{
    final Dialog dialog = new Dialog(VentilationActivity.this);
    dialog.setContentView(R.layout.menu_options);       
    dialog.setTitle("Configuration de l'adresse IP");           
    dialog.setCancelable(true);     
    dialog.show();

    EditText adressIp = (EditText) dialog.findViewById(R.id.editText1);

    SharedPreferences preferences = getSharedPreferences("Agrinuvo", 0);  
    String texte = preferences.getString("VentIpKey", "");

    adressIp.setText(texte); 

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(adressIp, InputMethodManager.SHOW_IMPLICIT);

    Button btnAccept = (Button) dialog.findViewById(R.id.button1);
    btnAccept.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v)                                                         
        {
            EditText adressIp = (EditText) dialog.findViewById(R.id.editText1); 
            textIp = adressIp.getText().toString();

            SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("VentIpKey", textIp);
            editor.commit();

            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(adressIp.getWindowToken(), 0);
            dialog.dismiss();                                                               
        }
    }); 
}

And, of course this is not working. Everytime I close the dialog window and reopen it the EditText text is empty. Thanks for any help you can provide.

4

4 回答 4

1

在你的内部,你onClickObserver为一个以你的活动的类名命名的文件创建一个 SharedPreference 对象。至少这是 Activity 的getPreferences(int)文档所述。尝试以与您相同的方式初始化该对象showDialog或使showDialog'preferences最终。

于 2012-09-14T15:56:24.887 回答
1

我在我的应用程序中使用首选项已经有一段时间没有太多问题了,我会建议几件事:

getSharedPreferences() 应该只用于不同活动之间共享的偏好。如果只有您的一个 Activity 将使用数据,请使用它来保存:

    SharedPreferences settings  = getPreferences (MODE_PRIVATE);
    SharedPreferences.Editor ed = settings.edit();

    ed.putBoolean ("BooleanKey", booleanVar);
    ed.putInt     ("IntKey", intVar);
    ed.putFloat   ("FloatKey", floatVar);
    ed.putLong    ("LongKey",  longVar);

    ed.commit();

这要检索:

    SharedPreferences settings = getPreferences (MODE_PRIVATE);
    longVar = settings.getLong ("longKey", 0);
    ...

如果您要在 Activites 之间共享您的偏好,那么您需要使用 getSharedPreferences(),但您不希望使用 MODE_PRIVATE。目前,我在编写数据的代码中使用 MODE_WORLD_WRITEABLE,在读取数据的地方使用 MODE_WORLD_READABLE,这可能不是最好的方法(至少,如果我从 Eclipse 得到的警告是可信的)。

祝你好运,
R。

于 2012-09-14T16:27:20.147 回答
1

在以下行中,您的 onclick 方法中可能存在错误

SharedPreferences preferences = getPreferences(MODE_PRIVATE);  

如果您将其更改为

SharedPreferences preferences = getSharedPreferences("Agrinuvo", Context.MODE_PRIVATE);  

它应该工作。按照您的称呼方式,您并没有获得与对话请求相同的偏好。

于 2012-09-14T15:56:30.457 回答
1

怎么样;

public void showDialog() {
    ....
    final SharedPreferences preferences = getSharedPreferences("Agrinuvo", 0);
    ....
        @Override
        public void onClick(View v) {
            ....
            // Use previous preferences instance instead.
            // SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("VentIpKey", textIp);
            editor.commit();
            ....
        }
    }
}

无论如何,似乎您正在写入与读取默认值不同的首选项。

于 2012-09-14T15:53:01.843 回答