Java Android:SharedReferences。如何正确地实施它们
我试图将用户条目存储到EditText字段中,但是当我退出应用程序时,它不会出现 例如,一个用户输入他/她的名字,然后退出应用程序。当用户返回并启动应用程序时,用户名将显示在EditText字段中。但是我不能让它工作。我相信这与共享参考有关,但我不确定我错在哪里 我对android和java还很陌生,所以发现这很难。任何帮助都将不胜感激Java Android:SharedReferences。如何正确地实施它们,java,android,sharedpreferences,Java,Android,Sharedpreferences,我试图将用户条目存储到EditText字段中,但是当我退出应用程序时,它不会出现 例如,一个用户输入他/她的名字,然后退出应用程序。当用户返回并启动应用程序时,用户名将显示在EditText字段中。但是我不能让它工作。我相信这与共享参考有关,但我不确定我错在哪里 我对android和java还很陌生,所以发现这很难。任何帮助都将不胜感激 public class MainActivity extends Activity { public final static String EXT
public class MainActivity extends Activity {
public final static String EXTRA_FROM = "com.example.assignment1.FROM";
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom);
String from = emailFrom.getText().toString();
outState.putString(EXTRA_FROM, from);
}
@Override
protected void onRestoreInstanceState(Bundle savedState)
{
EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom);
String from = savedState.getString(EXTRA_FROM);
emailFrom.setText(from);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void emailSend (View sendButton)
{
Intent intent = new Intent(this,DisplayEmailActivity.class);
EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom);
String from = emailFrom.getText().toString();
intent.putExtra(EXTRA_FROM,from);
SharedPreferences saveFrom = getSharedPreferences(EXTRA_FROM, MODE_PRIVATE);
Editor editor = saveFrom.edit();
editor.putString(EXTRA_FROM, from);
editor.commit();
String storedfrom = saveFrom.getString(EXTRA_FROM, from);
emailFrom.setText(storedfrom);
startActivity(intent);
}
第二项活动
public class DisplayEmailActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_email);
Intent intent = getIntent();
String from = intent.getStringExtra(MainActivity.EXTRA_FROM);
TextView textFrom =(TextView)findViewById(R.id.displayEmailFrom);
textFrom.setText(from);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_display_email, menu);
return true;
}
好的,在您将值存储在
编辑文本emailFrom
中后,您必须将其保存在SharedReferences中,如下所示:
String from = emailFrom.getText().toString(); // Getting String value from EditText and storing it in "from" String
SharedPreferences settings = getSharedPreferences("MyPreferencesFile", 0); // Opening SharedPreferences
SharedPreferences.Editor editor = settings.edit(); // Opening editor for SharedPreferences
editor.putString("exampleName", from); // You are putting here a String "from" and give it a "exampleName" name. Later you will use this name to restore data.
然后在启动应用程序时,需要从SharedReferences加载数据:
SharedPreferences settings = getSharedPreferences("MyPreferencesFile", 0); // Again opening SharedPreferences
String from = settings.getString("exampleName", ""); // The second argument is the default value. The default value will be set if there wasn't saved any data with "exampleName" name
if(from != "") // If "from" is not empty, it means that the data was stored in SharedPreferences
emailFrom.setText(from); // Setting text in your EditText
您正在使用
onSaveInstanceState()
和onRestoreInstanceState()
保存和还原编辑文本的内容。但是,只有当操作系统终止应用程序并立即重新创建(即设备旋转)时,才会调用此方法
如果您希望在用户终止应用程序时保留值,则需要将其存储在某个位置、文件、数据库,或者在您的情况下,我建议您使用SharedReference
我在以下网站上发布了一个类似问题的答案:
祝你好运。你到底想实现什么目标?SharedReferences用于存储一些数据,以便下次启动应用程序时可以访问这些数据。。。你最好在网上找到一些示例代码,而不是在这里问一个非常一般的问题。我的目标是当用户退出应用程序时,表单中的条目仍然可以在EditText字段中看到。例如,在表单“FROM”中,当用户再次启动应用程序时,用户名“TOM”将存储在EditText字段中。您忘记了:“请注意,您必须调用commit(),才能使您在编辑器中执行的任何更改实际显示在SharedReferences中。”我尝试过实现上述代码,但没有效果(使用Editor.commit()). 当您说需要从SharedReferences加载数据时,您的意思是它应该存储在OnCreate方法中吗?