共享首选项不保留任何内容

时间:2012-09-14 15:47:00

标签: android sharedpreferences

我知道这已经被问了很多,但我似乎无法让这个工作。 情况:我有一个带有EditText的对话框,其中有一个接受按钮。当用户触摸接受按钮时,我想用SharedPreferences存储字符串的值。这是我到目前为止的代码。

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

当然,这不起作用。每次我关闭对话框窗口并重新打开它时,EditText文本都是空的。感谢您提供的任何帮助。

4 个答案:

答案 0 :(得分: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();
            ....
        }
    }
}

无论如何,似乎你写的是不同于你读取默认值的偏好。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在以下行

中,您的onclick方法中可能会出现错误
SharedPreferences preferences = getPreferences(MODE_PRIVATE);  

如果您将其更改为

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

它应该工作。你调用它的方式,你没有得到你请求对话的相同偏好。

答案 3 :(得分:1)

我已经在我的应用程序中使用了偏好而没有太多问题很长一段时间我会建议一些事情:

getSharedPreferences()仅应用于不同活动之间共享的首选项。如果只有您的一个活动将使用该数据,请使用此保存:

    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上。