跨多个活动共享首选项

时间:2017-07-26 05:59:45

标签: java android android-intent android-activity sharedpreferences

我有一个需要使用共享偏好的项目。我现在只是尝试共享首选项,因此我不是通过意图传递字符串值,而是通过共享首选项传递它。在我的第一个活动中,我有这个:

SharedPreferences prefs = this.getSharedPreferences("com.example.mayankthakur.personalprojecttrial2", Context.MODE_PRIVATE);
Intent nameSave = getIntent(); 
name = nameSave.getStringExtra("name") 
prefs.edit().putString(name, "name").apply();

在我的第二个活动中

SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE);
name = preferences.getString("name", name);
example.setText(name);

现在,我在第二个活动中只有一个textview,我想显示字符串名称的值。应用程序没有崩溃,但有一个错误。 textview只显示" name"而不是显示字符串名称的值。没有引号。我查了一下,结果发现我需要一个字符串键来获取get string方法和put字符串。所以我想知道字符串键是什么(所以我以后不会遇到这个问题)以及如何在我的代码中解决这个问题。

6 个答案:

答案 0 :(得分:0)

在第一个活动中;

 SharedPreferences prefs = this.getSharedPreferences("prefs", Context.MODE_PRIVATE);
prefs.edit().putString(name, "name").apply();

在第二项活动中;

SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE);
name = preferences.getString("name", "");
example.setText(name);

答案 1 :(得分:0)

你只需要扭转它。变化

prefs.edit().putString(name, "name").apply();

prefs.edit().putString("name", name).apply();

在共享首选项中,您输入的第一个参数是键,第二个参数是值。 当你得到它时,第一个参数是key,第二个参数是默认值,如果第一个参数键值为null。

name = preferences.getString("name", "default value");

答案 2 :(得分:0)

这里有两处变化..

prefs.edit().putString("name", name).apply();

而不是在getstring中写入名称,你必须传递默认值,所以改变你的代码,

   SharedPreferences preferences = getSharedPreferences("prefs", 
  Context.MODE_PRIVATE);

        example.setText(preferences.getString("name",null);

这将解决您的问题

答案 3 :(得分:0)

SharedPreferences prefs = this.getSharedPreferences(" com.example.mayankthakur.personalprojecttrial2",Context.MODE_PRIVATE);

Intent nameSave = getIntent(); 
name = nameSave.getStringExtra("name") 

prefs.edit()。putString(" name",name).apply();

如上所述,您需要进行更改。不同的是"名称"引号是关键名称,简单的变量名称描述" name"的值。键。这将通过" name"中的getStringExtra(" name")设置您获得的值。关键共享偏好。

答案 4 :(得分:0)

试试这段代码:

第一项活动

public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
Intent nameSave = getIntent(); 
name = nameSave.getStringExtra("name") 
Log.d("TEST name = "+name);
editor.putString("name", name);
editor.apply();

第二项活动:

public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
Log.d("TEST name = "+name);

答案 5 :(得分:0)

你先给出键值然后键值然后给错了。检查下面

而不是这个

prefs.edit().putString(name, "name").apply();

更改为

prefs.edit().putString("name", name).apply();