即使在应用关闭时,共享首选项也会永久传递给另一个活动
Posted
技术标签:
【中文标题】即使在应用关闭时,共享首选项也会永久传递给另一个活动【英文标题】:Shared Preferences passed to another activity permanently even on app close 【发布时间】:2015-10-19 11:55:22 【问题描述】:我有这个活动,它将使用意图将值传递给 mainactivity,并尝试对其进行烘烤以查看它是否传递了值并且我实现了它! 意味着它的工作,我也使用 sharedpreferences 将这些值保存到 textview。但是当我关闭应用程序并尝试再次使用 toast 来检查它是否具有来自另一个活动的值而不使用意图时,toast 什么也不显示。
有什么方法可以同时使用共享首选项将其永久保存在 mainactivity 中?
编辑
主活动
SA prefcontacts;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
final String prefcon1 = intent.getStringExtra("prefcon1");
final String prefcon2 = intent.getStringExtra("prefcon2");
final String prefcon3 = intent.getStringExtra("prefcon3");
final String prefcon4 = intent.getStringExtra("prefcon4");
final String prefcon5 = intent.getStringExtra("prefcon5");
Button show = (Button)findViewById(R.id.button3);
show.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Toast.makeText(getApplicationContext(), prefcon1, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), prefcon2, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), prefcon3, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), prefcon4, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), prefcon5, Toast.LENGTH_SHORT).show();
);
SA.class
EditText et1, et2, et3, et4, et5;
Button btnSave;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_s);
btnSave = (Button)findViewById(R.id.btnSave);
et1 = (EditText)findViewById(R.id.editText1);
et2 = (EditText)findViewById(R.id.editText2);
et3 = (EditText)findViewById(R.id.editText3);
et4 = (EditText)findViewById(R.id.editText4);
et5 = (EditText)findViewById(R.id.editText5);
SharedPreferences settings = getSharedPreferences("MY_PREFS", 0);
et1.setText(settings.getString("prefcon1", ""));
et2.setText(settings.getString("prefcon2", ""));
et3.setText(settings.getString("prefcon3", ""));
et4.setText(settings.getString("prefcon4", ""));
et5.setText(settings.getString("prefcon5", ""));
btnSave.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
finish();
Toast.makeText(getApplicationContext(), "Preferences Saved!", Toast.LENGTH_LONG).show();
Intent intent = new Intent (SA.this, MainActivity.class);
intent.putExtra("prefcon1", et1.getText().toString());
intent.putExtra("prefcon2", et2.getText().toString());
intent.putExtra("prefcon3", et3.getText().toString());
intent.putExtra("prefcon4", et4.getText().toString());
intent.putExtra("prefcon5", et5.getText().toString());
startActivity(intent);
);
【问题讨论】:
How to use SharedPreferences in android to store, fetch and edit values的可能重复 使用该链接中的示例,将您的数据保存到活动 1 中的首选项,并在 mainactivity 中检索它 分享代码。|如果您使用的是 saharedprefrences,则无需将其传递给另一个活动,它可用于整个应用程序 @TimCastelijns 我认为情况不同 很难说。你没有告诉我们很多关于你的情况 【参考方案1】:列出的
intent.putExtra("prefcon1", et1.getText().toString());
intent.putExtra("prefcon2", et2.getText().toString());
intent.putExtra("prefcon3", et3.getText().toString());
intent.putExtra("prefcon4", et4.getText().toString());
intent.putExtra("prefcon5", et5.getText().toString());
//PUT
SharedPreferences.Editor editor = s.edit();
editor.putString();
editor.commit("prefcon2", et2.getText().toString());
editor.commit("prefcon3", et3.getText().toString());
editor.commit("prefcon4", et4.getText().toString());
editor.commit("prefcon5", et5.getText().toString());
editor.commit();
【讨论】:
【参考方案2】:SharedPreference 是全局的。这不是特定于活动的。因此,一旦您从任何 Activity 或 Fragment 在 SharedPreference 中保存了一些数据,这些数据将在任何其他 Activity 或 Fragment 中可用,即使您再次关闭并打开应用程序也是如此。
如果您要将数据保存在 SharedPreference 中,那么通过 Intent 传递它是没有意义的(如果您使用 commit()
而不是 apply()
)。
【讨论】:
如果您要将数据保存在 SharedPreference 中,那么通过 Intent 传递它是没有意义的。 对此无法确定。根据您是否使用commit()
或 apply()
编写首选项,创建新活动时首选项可能尚不可用
是的。完全忘记了。谢谢。以上是关于即使在应用关闭时,共享首选项也会永久传递给另一个活动的主要内容,如果未能解决你的问题,请参考以下文章
Unity C# - 单击按钮将游戏对象传递给另一个 C# 脚本 [关闭]