Android 当我获取位于差异应用程序中的SharedReferences时,getSharedReferences()始终返回第一个SharedReferences对象

Android 当我获取位于差异应用程序中的SharedReferences时,getSharedReferences()始终返回第一个SharedReferences对象,android,sharedpreferences,Android,Sharedpreferences,我想使用一个应用程序从2个或更多应用程序中读取相同的首选项 第一个应用程序(com.ex.sp1)将字符串No.1写入其共享首选项myPref Context context = getApplicationContext(); SharedPreferences preferences = context.getSharedPreferences("myPref", Context.MODE_WORLD_READABLE); preferences.edit().putString("name

我想使用一个应用程序从2个或更多应用程序中读取相同的首选项

第一个应用程序(
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();
Context context = getApplicationContext();
SharedPreferences preferences = context.getSharedPreferences("myPref", Context.MODE_WORLD_READABLE);
preferences.edit().putString("name", "No.2").commit();
第二个应用程序(
com.ex.sp2
)将字符串
No.2
写入其共享首选项
myPref

Context context = getApplicationContext();
SharedPreferences preferences = context.getSharedPreferences("myPref", Context.MODE_WORLD_READABLE);
preferences.edit().putString("name", "No.1").commit();
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
…,则结果是正确的

有没有人有相同的经验,或者有解决方案?
谢谢

尝试在另一个SharedReferences对象中声明第二个SharedReferences,可能它没有覆盖它

您正在覆盖您的姓名。是吗?我试过了,也得到了同样的结果。我还尝试用其他方法获取第二个SharedReferences,然后又得到了“No.1”。如果使用eclipse,打开DDMS透视图,在文件浏览器中,转到data/data/com.ex.sp1和data/data/com.ex.sp2,拉取两个SharedReferences文件,检查它们是否被创建并正确设置。我已经使用adb shell检查这些文件。它们已正确创建和设置。另外,在第三个应用程序中,如果我从com.ex.sp2读取首选项,然后从com.ex.sp1读取首选项,则结果是“No.2 No.2”。似乎android只检查首选项文件名,然后给出了缓存文件:(。