Java 编辑文本不是';共享数据引用保存的数据

Java 编辑文本不是';共享数据引用保存的数据,java,android,sharedpreferences,Java,Android,Sharedpreferences,我应该使用SharedReferences保存三个EditText的字符串,这样当用户重新进入应用程序时,我可以在文本视图中使用它们。这就是我尝试过的: public类MainActivity扩展了AppCompatActivity{ 私有编辑文本私有名称; 私人编辑文本姓氏; 私人编辑文本LastMov; 共享参考sp; 私有按钮SaveBtn; 私有文本查看文本; 字符串Priv、Lst、Mov; @凌驾 创建时受保护的void(Bundle savedInstanceState){ sup

我应该使用
SharedReferences
保存三个EditText的字符串,这样当用户重新进入应用程序时,我可以在文本视图中使用它们。这就是我尝试过的:

public类MainActivity扩展了AppCompatActivity{
私有编辑文本私有名称;
私人编辑文本姓氏;
私人编辑文本LastMov;
共享参考sp;
私有按钮SaveBtn;
私有文本查看文本;
字符串Priv、Lst、Mov;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PrivName=(EditText)findViewById(R.id.PrivName);
LastName=(EditText)findViewById(R.id.LastName);
LastMov=(EditText)findViewById(R.id.LastMov);
SaveBtn=(按钮)findviewbyd(R.id.SaveBtn);
Text=(TextView)findViewById(R.id.Message);
sp=getSharedReferences(“电影”,Context.MODE\u PRIVATE);
SaveBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Priv=PrivName.getText().toString();
Lst=LastName.getText().toString();
Mov=LastMov.getText().toString();
SharedReferences.Editor=sp.edit();
编辑器.putString(“名称”,Priv);
编辑器.putString(“Name2”,Lst);
编辑:putString(“电影”,Mov);
commit();
}
});
setText(“我们希望您“+Priv+”+Lst+”喜欢这部电影:“+Mov”);
}
}

显然,问题在于,当您单击按钮时,文本视图会更改为您想要的内容,但当您重新进入应用程序时,所有内容都会重置,而不是保持不变,您还需要从SharedPrefs读取内容,这样您就可以实实在在地填写编辑文本。 试试这样:

将此添加到onCreate方法中

sp = getSharedPreferences("Movies", Context.MODE_PRIVATE);
PrivName.setText(sp.getString("Name", "")); //The empty string after the comma is a default value incase you don't a stored value for that key
LastName.setText(sp.getString("Name2", ""));
LastMov.setText(sp.getString("Movie", ""));

onCreate方法的末尾调用以下方法

private void showSavedValue()
{
  // Retaining the values from shared preferences
  String savedPrivName = sp.getString("Name",""); // If no value was stored previously it will return an empty string
  String savedLastName = sp.getString("Name2", "");
  String savedLastMovie = sp.getString("Movie","");

  //Write your code here to use these values where you want to use them


}

注意:在编写Java时,请尝试遵循推荐的命名约定。可以找到有关Java命名约定的详细指南

正确查看源代码您正在做什么

editor.putString("Name", Priv);
editor.putString("Name2", Lst);
editor.putString("Movie", Mov);
editor.commit();
这里您正在保存一些参数。。其中,
“Name”
是一个id,您正在将
Priv
字符串保存到该id。。《名字2》和《电影》也是如此

Priv = PrivName.getText().toString();
Lst = LastName.getText().toString();
Mov = LastMov.getText().toString();
您正在从EditText获取文本并将其保存到
Priv、Lst、Mov
。但是,它们并不是作为共享参考。这意味着当您重新启动应用程序时,这些值将消失

Text.setText("We hope that you  " + Priv + " "  +Lst + " enjoyed the movie: " + Mov);
在上面的源代码中,您将显示那些在重新启动时将消失的值。并且,您将该代码编写为onCreate方法。所以,当您启动应用程序时,会显示这些值,但它没有值(
null

这是你应该试试的s是正确的,但他的解释很差,这就是为什么我要发布另一个答案

String savedPrivName = sp.getString("Name",""); // If no value was stored previously it will return an empty string


String savedLastName = sp.getString("Name2", "");
  String savedLastMovie = sp.getString("Movie","");

Text.setText("We hope that you  " + savedPrivName + " "  +savedLastName + " enjoyed the movie: " + savedLastMovie);

我在这里看到,您仅将文本保存在ShredPrefs中。在aoo重新启动后,你什么时候阅读它来填充文本?@Keselme问题是我正在努力保存文本。我想要一个按钮来保存使用SharedPrefs在EditText视图中写入的内容,然后让它显示在TextView中,即使你重新启动应用程序(此时会重置),它也会保持不变。保存后是否尝试打开共享首选项文件,它是空的吗?它现在保留了EditText视图中写入的内容,这更好,但是当你重新打开应用程序时,我试图用来显示字符串的TextView会重置