java - 如何从非 Context 类获取 SharedPreferences 并且不使用非最终静态变量?

标签 java android sharedpreferences static-methods static-members

我需要从名为 A 的抽象类内部获取对共享首选项的引用这不会扩展任何东西。

我无法通过 Context反对此类获取共享首选项,因为它是抽象的,我不会实例化它。我创建了类(class) A由共享单个属性的其他 POJO 扩展,即 uuid 。 UUID 在应用程序首次运行时生成一次,这就是我将其存储在共享首选项中的原因。上课A的构造函数,我希望设置 uuid基于共享首选项中的内容。

public abstract class A {
    private String uuid;
    public A() {
        // this is how I'm hoping to use the shared preferences
        this.uuid = sharedPrefs.getString("KEY_UUID", "null");
    }
    // getter and setter
}

One suggestion I found是延长Application ,比如说在一个名为 App 的类中,并包含属性 android:name=".App"<application> list 中的标签。我想象App会写成这样:

public class App extends Application {
    private static App app;
    public void onCreate() {
        this.app = this;
    }
    public static App getApp() {
        return app;
    }
}

...以便从类内部 A ,我可以这样做:

this.uuid = App.getApp().getSharedPreferences("prefs_name.txt", Context.MODE_PRIVATE).getString("KEY_UUID", "null");

但是,非最终静态字段app不是吗?失去对 App 的引用当Android杀死进程或手机重新启动时变为null?在不使用此方法的情况下,如何获取对共享首选项的引用?或者我应该手动将 UUID 写入文件?

最佳答案

将您的应用程序类修改为如下所示:

public class App extends Application
{
    private static Context context;

    @Override
    public void onCreate()
    {
        super.onCreate();
        App.context = getApplicationContext();
    }

    public static Context getStaticContext()
    {
        return App.context;
    }
}

关于java - 如何从非 Context 类获取 SharedPreferences 并且不使用非最终静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541378/

相关文章:

java - Android - 无法从自定义对话框中的 EditText 获取值

java - Spring Tomcat : Non-whitespace characters are not allowed in schema elements . 锯 '301 Moved Permanently'

java - 实现保存和恢复对象属性状态的最佳方式

android - 如何在 SharedPreferences 中存储整数数组?

android - 检查共享首选项中是否存在 key

java - 正则表达式匹配 "test"而不是 "test-1"

java - 贪吃蛇游戏中的 die() 方法用于有毒食物

android - 如何从proguard中保留枚举

Android ArrayList<String> 存储未恢复回其保存的排序顺序

java - 为 toString 更改 HashMap 的键值分隔符