java - EditText 不由 SharedPreferences 保存
问题描述
我应该使用保存三个 EditTexts 的字符串,SharedPreferences
以便在用户重新进入应用程序时可以在 TextView 中使用它们。这是我尝试过的:
public class MainActivity extends AppCompatActivity {
private EditText PrivName;
private EditText LastName;
private EditText LastMov;
SharedPreferences sp;
private Button SaveBtn;
private TextView Text;
String Priv, Lst, Mov;
@Override
protected void onCreate(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 = (Button)findViewById(R.id.SaveBtn);
Text = (TextView) findViewById(R.id.Message);
sp = getSharedPreferences("Movies", Context.MODE_PRIVATE);
SaveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Priv = PrivName.getText().toString();
Lst = LastName.getText().toString();
Mov = LastMov.getText().toString();
SharedPreferences.Editor editor = sp.edit();
editor.putString("Name", Priv);
editor.putString("Name2", Lst);
editor.putString("Movie", Mov);
editor.commit();
}
});
Text.setText("We hope that you " + Priv + " " +Lst + " enjoyed the movie: " + Mov);
}
}
显然问题在于,当您单击按钮时,TextView 会更改为您想要的内容,但是当您重新进入应用程序时,一切都会重置而不是保持不变
解决方案
您还需要从 SharedPrefs 中读取数据,以便实际填充 EditText。尝试这样的事情:
在你的 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", ""));
推荐阅读
- kubernetes - kube-dns 服务发现无法发现服务的端口号
- docker - 这个 Dockerfile 语句有什么问题?我应该使用哪一个?
- php - 使用 FPDF 在 Cellfit 上除以零
- c# - 停止并重新启动后,如何使秒表(计时器)从 00:00:00 开始?
- javascript - 在对象中添加另一个具有键值的属性
- c# - Botframework V4:关于输入表单卡片的问题
- linux - 在 CMake 中有条件地查找共享库的依赖项
- python - 带有 simplejson 后端的 jsonpickle 将 Decimal 序列化为 null
- java - 为什么在这种情况下我没有得到 println 的输出?
- docker - 如何在 Dockerfile 中设置帐户的密码?