在两个Activity之间获取SharedPreference

6 浏览
0 Comments

在两个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但是这些字符串似乎是空的,不包含任何姓名或电话号码,我做错了什么?

0
0 Comments

问题的出现原因:在两个Activity中需要共享SharedPreferences中的数据,但在Activity A中创建的SharedPreferences无法在Activity B中使用。

解决方法:在Activity A中创建SharedPreferences,并将数据存储在其中。在Activity B中使用相同的SharedPreferences名称,通过getString方法获取需要的数据。这样就可以实现在不同的Activity中共享SharedPreferences中的数据。

0
0 Comments

从上面的内容可以看出,问题出现在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实例,就能够正确地共享数据了。

0
0 Comments

问题原因:在代码中,使用了两种不同的方法来获取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());

0