0

基本上,我想设置一个类来让设备具有 getter 和 setter 来存储和检索数据,以及其他类来访问它。我设法让 sharedpreferences 在一个类中工作,但在两个类中遇到问题(我熟悉 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";

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

final Storage storage = new Storage();

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

7 回答 7

1

在共享偏好中存储一些东西:

    SharedPreferences prefs = getSharedPreferences("TOT", Context.MODE_PRIVATE);  
    Editor ed = prefs.edit();  
    ed.putString(key, value);  
    ed.commit(); 

在您的情况下,您可以在 onCreate 方法中使用上述代码。

从共享偏好中获取一些东西:

    SharedPreferences prefs = getSharedPreferences("TOT", Context.MODE_PRIVATE);
    prefs.getString(key, null);
于 2013-10-07T14:05:21.413 回答
1

尝试这个:

SharedPreferences prefs = this.getSharedPreferences("uk.co.kenreid.examplestory", Context.MODE_MULTI_PROCESS);
于 2013-10-07T13:45:54.647 回答
1

我相信您的问题是初始化SharedPreferences远离Activity?

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

例如。

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 单例的教程。

于 2013-10-07T14:28:00.853 回答
0

试试这样:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());

mVariable = sharedPref.getBoolean(SettingsActivity.KEY_TO_VARIABLE, false);
于 2013-10-07T13:45:22.540 回答
0

检查getSharedPreferences的文档

这里的第一个参数是存储数据的共享首选项的名称。因此,您需要使用每个类的相同名称来访问相同的共享首选项。

于 2013-10-07T13:48:03.500 回答
0

你可以使用一个单独的类来处理你所有的偏好

public class PreferenceManager {
    public static void setLogInSuceess(boolean login, Context context) {
        SharedPreferences preferences;
        preferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE);

        preferences.edit().putBoolean("LOGIN", login).commit();
    }

    public static boolean getLogInSuceess(Context context){
        SharedPreferences preferences;
        preferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
        boolean login = preferences.getBoolean("LOGIN", false);

        return login;
    }
}

随时随地使用它,

PreferenceManager.setLogInSuceess(true/false, context); boolean _login = PreferenceManager.getLogInSuceess(context);

于 2013-10-07T14:29:11.887 回答
-1

尝试这个:

public class Storage extends Application

Application 是一个用于共享来自活动的数据的类

于 2013-10-07T14:20:56.150 回答