在两个Activity之间获取SharedPreference
在两个Activity之间获取SharedPreference
我在MainActivity.Java中的ContactView.Java中无法读取我的SharedPreference。这是我在ContactView.Java中的代码:\n
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putString("contactName", name); editor.putString("contactPhone", phoneNo); editor.commit();
\n以及在设置它们到TextView的OnCreate方法中的代码:\n
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE); String name = settings.getString("contactName", ""); //第二个参数在“contactName”为空时设置默认数据 if (!name.isEmpty()){ textView1.setText(name); } String phoneNo = settings.getString("contactPhone", "");//第二个参数在“contactName”为空时设置默认数据 if (!phoneNo.isEmpty()){ textView2.setText(phoneNo); }
\n现在当我回到MainActivity时,我想读取它们:\n
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); String phoneNo = sharedPreferences.getString("contactPhone", ""); String name = sharedPreferences.getString("contactName", "");
\n但是这些字符串似乎是空的,不包含任何姓名或电话号码,我做错了什么?
从上面的内容可以看出,问题出现在MainActivity中使用SharedPreference获取数据的代码上。具体原因是在MainActivity中获取SharedPreference时使用了错误的文件名:"SelectedContact",而在另一个Activity中获取SharedPreference时使用的是正确的文件名。这导致了两个Activity获取到的SharedPreference实例不是同一个,无法共享数据。
解决方法是在MainActivity中使用正确的文件名来获取SharedPreference实例。修改代码如下:
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE); String phoneNo = settings.getString("contactPhone", ""); String name = settings.getString("contactName", "");
这样,两个Activity都使用相同的文件名来获取SharedPreference实例,就能够正确地共享数据了。
问题原因:在代码中,使用了两种不同的方法来获取SharedPreferences对象,即PreferenceManager.getDefaultSharedPreferences(getApplicationContext())和getSharedPreferences("SelectedContact", MODE_PRIVATE)。这导致了获取到的SharedPreferences对象不同。
解决方法:统一使用PreferenceManager.getDefaultSharedPreferences(getApplicationContext())来获取SharedPreferences对象。这样可以确保在不同的Activity之间获取到的SharedPreferences对象是相同的。
以下是修改后的代码示例:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());