java - Android - 两个类共享首选项

标签 java android sharedpreferences

基本上,我想设置一个类,让设备具有 getter 和 setter 来存储和检索数据,以及其他类来访问它。我设法让共享首选项在一个类中工作,但在两个类中遇到麻烦(我熟悉Java,但不熟悉Android,我在某处读到我不应该使用 Activity 而应该使用静态,并且也无法使其工作)。不管怎样,这里是 getter/setter 类。

public class Storage extends Activity {


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
}

final SharedPreferences prefs = this.getSharedPreferences(
        "uk.co.kenreid.examplestory", Context.MODE_PRIVATE);

String nameKey = "uk.co.kenreid.examplestory.name";

我使用另一个类中的这些代码 fragment 来访问它(final 用作 onclicklistener 中使用的变量“storage”):

final Storage storage = new Storage();

storage.storeItem("name", name);
System.out.println(storage.getString("name"));

最佳答案

我认为您的问题是在 Activity 之外初始化 SharedPreferences

假设这是您的问题,您可以通过 Storage 类的构造函数传递 Context 来初始化它。

例如。

SharedPreferences prefs;

public Storage(Context aContext){
    prefs = aContext.getSharedPreferences("uk.co.kenreid.examplestory", 
            Context.MODE_PRIVATE);
}

然后通过您原来的访问器方法进行访问。可能最好将 Application Context 而不是 Activity Context 传递给构造函数,因此当您创建 Storage 类时,请在 Activity 中像这样调用它:

Storage myStorage = new Storage(getApplicationContext());

创建一个 Singleton 类可能是明智之举,以允许您使用相同的 Storage 实例。网络上有很多关于 Java 中的单例的教程。

关于java - Android - 两个类共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226344/

相关文章:

java - 使用 SharedPreferences 获取 java.lang.nullPointerException

java - 字符串十六进制到字符串二进制转换器

java - 在 Repast J 中将数据层分配给网格

java - 获取 Spring 环境作为属性

android - Gradle无法解决所有依赖关系

android - GoogleService 初始化失败,状态 : 10, 缺少名称为 google_app_id 的字符串资源中的 google app id 值

Java Comparator.comparing 不比较?

java - 如何使用android中的服务组件制作倒计时器?

android - 替代 addPreferencesFromResource 作为其弃用

android - SharedPreferences 的问题