我需要从一个名为A
的抽象类中获取对共享prefs的引用,该类不扩展任何内容。
我不能将Context
对象传递给这个类来获取共享的prefs,因为作为抽象对象,我不会实例化它。我创建了类A
以便由其他共享一个属性的pojo扩展,即uuid
。uuid在第一次运行时在应用程序中生成一次,因此我将其存储在共享的prefs中。在类的构造函数中,我希望根据共享prefs中的内容设置A
。
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是扩展
uuid
,例如在名为Application
的类中,并在清单中的App
标记中包含属性android:name=".App"
。我想<application>
会这样写:public class App extends Application {
private static App app;
public void onCreate() {
this.app = this;
}
public static App getApp() {
return app;
}
}
……这样,在课堂上,我可以做到:
this.uuid = App.getApp().getSharedPreferences("prefs_name.txt", Context.MODE_PRIVATE).getString("KEY_UUID", "null");
然而,非最终静态字段
App
是否会失去对A
的引用,并在android终止进程或手机重新启动时变为空?不使用此方法,如何获取对共享prefs的引用?还是应该手动将uuid写入文件? 最佳答案
我不能将上下文对象传递给这个类来获取共享的prefs,因为作为抽象对象,我不会实例化它。
当然可以。将Context
作为构造函数的参数。或者,如果愿意的话,将SharedPreferences
作为构造函数的参数。子类的构造函数将需要接受相同的参数并将其传递给super()
调用。
然而,非最终静态字段应用程序是否会失去对该应用程序的引用,并在android终止进程或手机重新启动时变为空?
整个过程都结束了。说它失去了“它对应用程序的引用,变成了空的”就好比说,一个核爆炸的归零地的人在被蒸发之前会被晒伤——虽然可能是真的,但这一点有点没有意义。:-)
关于java - 如何从非上下文类获取SharedPreferences而不使用非最终静态变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13541378/