0

我想使用一个应用程序从 2 个或更多应用程序中读取相同的偏好。

第一个 application( com.ex.sp1) 将一个字符串写入No.1它的共享首选项myPref

Context context = getApplicationContext();
SharedPreferences preferences = context.getSharedPreferences("myPref", Context.MODE_WORLD_READABLE);
preferences.edit().putString("name", "No.1").commit();

第二个 application( com.ex.sp2) 将一个字符串写入No.2其共享首选项myPref

Context context = getApplicationContext();
SharedPreferences preferences = context.getSharedPreferences("myPref", Context.MODE_WORLD_READABLE);
preferences.edit().putString("name", "No.2").commit();

第三个应用程序从 1 和 2 获取首选项,然后在活动中显示字符串。

TextView myText = (TextView) findViewById(R.id.mytext);

Context sp1Context = createPackageContext("com.ex.sp1", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences preferences = sp1Context.getSharedPreferences("myPref", Context.MODE_WORLD_READABLE | Context.MODE_MULTI_PROCESS);
String sp1Text = preferences.getString("name", "Orz");

Context sp2Context = createPackageContext("com.ex.sp2", Context.CONTEXT_IGNORE_SECURITY);
preferences = sp2Context.getSharedPreferences("myPref", Context.MODE_WORLD_READABLE | Context.MODE_MULTI_PROCESS);
String sp2Text = preferences.getString("name", "Orz");
myText.setText(sp1Text + "   " + sp2Text);

预期的字符串应该是No.1 No.2,但结果是No.1 No.1

如果我将首选项文件名更改为不同的myPref1 myPref2...,那么结果是正确的。

有没有人有同样的经历,或者有解决办法?谢谢!

4

1 回答 1

0

尝试在不同的 SharedPreferences 对象中声明第二个 sharedpreferences,也许它没有覆盖它

于 2013-10-25T13:01:01.010 回答