Android - 两个类的共享首选项

时间:2013-10-07 13:35:42

标签: 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";

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

final Storage storage = new Storage();

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

7 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分: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);

答案 2 :(得分:1)

我认为您的问题是将SharedPreferences初始化为Activity

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

例如

SharedPreferences prefs;

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

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

Storage myStorage = new Storage(getApplicationContext());

创建 Singleton 类也许是明智之举,允许您使用相同的Storage实例。网络上有很多关于Singletons的Java教程。

答案 3 :(得分:0)

试试这样:

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

mVariable = sharedPref.getBoolean(SettingsActivity.KEY_TO_VARIABLE, false);

答案 4 :(得分:0)

查看getSharedPreferences

的文档

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

答案 5 :(得分: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);

答案 6 :(得分:-1)

试试这个:

public class Storage extends Application

应用程序是一个用于共享活动数据的类