我需要从名为 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/