gpt4 book ai didi

android - SharedPreferences 值在新实例后返回 null

转载 作者:搜寻专家 更新时间:2023-11-01 08:33:43 24 4
gpt4 key购买 nike

我正在通过我的 SettingsHelper 类在 SharedPreferences 中设置一个字符串,如下所示。我已经通过在设置后立即获取字符串来验证它实际上已经设置。

创建了 SettingsHelper 类的新实例。

然后我尝试检索我设置的字符串,但结果为空。

getName 是否会返回 null,因为我已经创建了 SettingsHelper 类的新实例?

public class SettingsHelper extends Application {

private static Context context;
Context ctx;

public void onCreate() {
super.onCreate();
context = getApplicationContext();
ctx = context;
}

public static Context getAppContext() {
return context;
}

public SettingsHelper() {
this.ctx = context;
}


public String getName() {
return PreferenceManager.getDefaultSharedPreferences(ctx).getString("myKey", "null");
}

public void setName(String name) {
PreferenceManager.getDefaultSharedPreferences(ctx).edit().putString("myKey", name).commit();
}
}

Activity A

SettingsHelper settingsHelper = new SettingsHelper();
settingsHelper.setName("John");

B 级

SettingsHelper settingsHelper = new SettingsHelper();
settingsHelper.getName(); //null

最佳答案

尝试将方法转换为静态方法:

public class SettingsHelper {

public static String getName(Context ctx) {
return PreferenceManager.getDefaultSharedPreferences(ctx).getString("myKey", "An error occured loading name");
}

public static void setName(String name, Context ctx) {
PreferenceManager.getDefaultSharedPreferences(ctx).edit().putString("myKey", name).commit();
}
}

用于调用(来自 Activity )。如果是外部 Activity ,请将其替换为上下文:

getName(this);

setName("Namey McNameface", this);

这样你就不需要实例了,它只是调用 SettingsHelper.setName/getName。

编辑

记得分配一个字符串:

SettingsHelper settingsHelper = new SettingsHelper();
String stringHandler = settingsHelper.GetName();
//handle string

编辑 #2

注意!

扩展应用程序对于像这样的类来说不是一个好主意。删除“扩展应用程序”。

What does it matter?

扩展 Activity 的类用于必须一直运行的任务,并且它们以正常方式初始化(​​Class c = new Class)

扩展应用程序的类通过编写 android:name=".MyClass" 的 list 进行初始化。这些类用于:

  • 初始化和处理 Firebase
  • 初始化和处理 ACRA
  • 初始化和处理权限等重要事项(如果您想在启动时立即检查它们

因此,扩展应用程序的类不适用于普通类,我建议您像我上面那样做。此外,因为你多次创建它,我认为 Context = null

我修改了上面的代码,复制过来再试试看能不能用

关于android - SharedPreferences 值在新实例后返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com