【发布时间】:2016-07-11 15:25:36
【问题描述】:
我创建了一个 sharedpreference 对象并尝试在同一个活动中检索我的数据,这是允许的操作吗?问题是,一旦应用程序开始运行,并且我在 textview 中输入了文本,输入的文本不会重新出现在单独的 textview 中。应用程序假设接收用户输入的文本并显示只是向下几个 dp,但是输入的文本从未再次出现。提前非常感谢大家。
final static String My_PREFERENCES= "sharedPreferences";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foodTV = (TextView) findViewById(R.id.foodTV);
foodET = (EditText) findViewById(R.id.foodET);
display = (TextView) findViewById(R.id.displayText);
SharedPreferences sharedPreferences =
getSharedPreferences(My_PREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear();
edit.putString("foodname", foodET.getText().toString());
edit.commit();
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(My_PREFERENCES, Context.MODE_PRIVATE);
String food = sharedPreferences.getString("foodname", "");
display.setText(food);
}
});
}
【问题讨论】:
-
请问您有什么问题
-
如果您在
onCreate()中使用edit.putString("foodname", foodET.getText().toString());,则会在共享首选项中存储一个空字符串,因为onCreate()中的EditText内没有任何内容。 -
移动此代码 SharedPreferences.Editor edit = sharedPreferences.edit();编辑.清除(); edit.putString("foodname", foodET.getText().toString());编辑.commit();在您的按钮 onclick 监听器中
-
我已经将代码模式化到 onclick 监听器 @SaravInfern 中,并且成功了!谢谢!但它是怎么起作用的呢?背后的原因是什么?
-
如@Lal 上述
edit.putString("foodname", foodET.getText().toString());所述在您的onCreate() 中,它在创建活动期间将edittext 的值(在oncreate 期间为空)保存在共享首选项中。现在您已将代码移动到按钮 onclick 内,每次单击按钮时编辑文本的值都存储在共享首选项中并在 onclick 中取回
标签: android android-sharedpreferences