【发布时间】:2012-11-12 13:03:56
【问题描述】:
我需要从一个名为 A 的抽象类中获取对共享首选项的引用,该类不扩展任何内容。
我无法将Context 对象传递给此类以获取共享首选项,因为它是抽象的,我不实例化它。我创建了类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 的类中,并在清单的<application> 标记中包含一个属性android:name=".App"。我想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 终止进程或手机重新启动时变为空?如何在不使用此方法的情况下获得对共享首选项的引用?还是我应该手动将 UUID 写入文件?
【问题讨论】:
标签: java android sharedpreferences static-methods static-members