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

10-12 04:28