Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 共享首选项不保留任何内容_Android_Sharedpreferences - Fatal编程技术网

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

Android 共享首选项不保留任何内容,android,sharedpreferences,Android,Sharedpreferences,我知道这已经被问了很多,所以,但我只是不能让这个工作。 情境:我有一个对话框,里面有一个EditText,还有一个accept按钮。当用户点击accept按钮时,我想用SharedReferences存储字符串的值。这是我到目前为止的代码 public void showDialog() { final Dialog dialog = new Dialog(VentilationActivity.this); dialog.setContentView(R.layout.menu

我知道这已经被问了很多,所以,但我只是不能让这个工作。 情境:我有一个对话框,里面有一个EditText,还有一个accept按钮。当用户点击accept按钮时,我想用SharedReferences存储字符串的值。这是我到目前为止的代码

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文本都是空的。谢谢你能提供的帮助。

怎么样

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();
            ....
        }
    }
}
不管怎么说,似乎您写入的首选项与读取默认值的首选项不同。

如何

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

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

在您的
onClickObserver
中,您为一个以活动类名命名的文件创建了一个SharedReference对象。至少这是活动的
getPreferences(int)
文档中的状态。尝试以与在
showDialog
中相同的方式初始化该对象,或者将
showDialog
首选项设置为最终设置。

onClickObserver
中,您可以为以活动类名命名的文件创建一个SharedReference对象。至少这是活动的
getPreferences(int)
文档中的状态。尝试初始化该对象,方法与在
showDialog
中初始化该对象的方法相同,或者将
showDialog
首选项设置设置为最终设置。

下面一行中的onclick方法似乎有错误

SharedPreferences preferences = getPreferences(MODE_PRIVATE);  
如果你把它改成

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

它应该会起作用。您调用它的方式与请求对话框的首选项不同。

下面一行中的onclick方法似乎有错误

SharedPreferences preferences = getPreferences(MODE_PRIVATE);  
如果你把它改成

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

它应该会起作用。按照您的调用方式,您没有得到与您请求的对话框相同的首选项。

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

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

    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);
    ...
如果要在活动中共享首选项,则需要使用GetSharedReferences(),但不要使用用户模式。目前,我在编写数据的代码中使用MODE_WORLD_WRITEABLE,在读取数据的代码中使用MODE_WORLD_READABLE,这可能不是最好的方法(至少,如果我从Eclipse得到的警告可信的话)

祝你好运,

R.

我在应用程序中使用首选项已经有很长一段时间没有出现太多问题了,我想提出几点建议:

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

    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);
    ...
如果要在活动中共享首选项,则需要使用GetSharedReferences(),但不要使用用户模式。目前,我在编写数据的代码中使用MODE_WORLD_WRITEABLE,在读取数据的代码中使用MODE_WORLD_READABLE,这可能不是最好的方法(至少,如果我从Eclipse得到的警告可信的话)

祝你好运,

R.

别忘了做
preferences=getSharedReferences(“Agrinuvo”,0)执行onClick之前的某个地方。不要忘记执行
preferences=getSharedReferences(“Agrinuvo”,0)在onClick执行之前的某个地方。@bali182谢谢你捕捉到了这一点。我复制并粘贴了问题,但忘了更改它。@bali182谢谢您的关注。我复制并粘贴了问题,但忘了更改它。