sharedpreferences保存对象 - android sharedpreferences封装




如何从Android中的PreferenceActivity获取SharedPreferences? (4)

我正在使用PreferenceActivity为我的应用程序显示一些设置。 我通过xml文件膨胀设置,以便我的onCreate(和完整的类方法)如下所示:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

PreferenceActivity PreferenceFragment的javadoc声明

这些首选项会在用户与它们交互时自动保存到SharedPreferences。 要检索此活动中首选层次结构将使用的SharedPreferences实例,请使用与此活动相同的包中的上下文调用getDefaultSharedPreferences(android.content.Context)。

但是,我如何在另一个活动中获得SharedPreference的名称? 我只能打电话

getSharedPreferences(name, mode)

在其他活动中,但我需要PreferenceActivity使用的SharedPreference的名称。 什么是名字,或者我该如何找回它?


不得不在任何地方传递上下文真的很烦人。 代码变得太冗长而难以管理。 我在每个项目中都会这样做......

public class global {
    public static Activity globalContext = null;

并将其设置在主要活动创建中

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

所有的偏好键都应该独立于语言,我很震惊没有人提到这一点。

getText(R.string.yourPrefKeyName).toString()

现在在一行代码中简单地调用它

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

如果你有一个复选框,你想在任何java文件中获取它的值,例如true / false--

使用 -

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

首先声明这些方法..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

然后在你想要使用pref时调用它:

putPref("myKey", "mystring", getApplicationContext());

当你想要得到一个优先级时调用它:

getPref("myKey", getApplicationContext());

或者你可以使用这个对象https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo ,它甚至可以进一步简化一切

例:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

更新

根据共享首选项| 由Sai Geetha MN撰写的Android开发者教程(第13部分)

许多应用程序可能提供一种方法来捕获用户对特定应用程序或活动设置的首选项。 为了支持这一点,Android提供了一组简单的API。

首选项通常是名称值对。 它们可以作为“共享首选项”存储在应用程序中的各种活动中(请注意,目前不能在各个进程间共享)。 或者它可能是需要针对某个活动存储的内容。

  1. 共享首选项:共享首选项可以被应用程序的所有组件(活动,服务等)使用。

  2. 处理偏好的活动:这些偏好只能在特定活动中使用,并且不能被应用程序的其他组件使用。

共享首选项:

共享首选项在Context类的getSharedPreferences方法的帮助下进行管理。 首选项存储在默认文件(1)中,或者您可以指定用于引用首选项的文件名(2)

(1) 推荐的方法是使用默认模式,而不指定文件名

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2)以下是在指定文件名时如何获取实例

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE是首选项的操作模式。 这是默认模式,意味着创建的文件只能被调用应用程序访问。 其他两种支持的模式是MODE_WORLD_READABLEMODE_WORLD_WRITEABLE 。 在MODE_WORLD_READABLE其他应用程序可以读取创建的文件,但不能修改它。 在MODE_WORLD_WRITEABLE情况下,其他应用程序也对创建的文件具有写入权限。

最后,一旦你有了首选项实例,以下是你可以从首选项中检索存储值的方法:

int storedPreference = preferences.getInt("storedInt", 0);

要将值存储在首选项文件SharedPreference.Editor对象中必须使用。 EditorSharedPreference类中的嵌套接口。

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

编辑器还支持像remove()clear()这样的方法从文件中删除首选项值。

活动首选项:

共享首选项可以被其他应用程序组件使用。 但是,如果您不需要与其他组件共享首选项并希望获得活动私人首选项,则可以使用该活动的getPreferences()方法执行此操作。 getPreference方法使用getSharedPreferences()方法和活动类的名称作为首选项文件名。

以下是获取偏好的代码

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

存储值的代码也与共享首选项的情况相同。

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

您还可以使用其他方法,例如将活动状态存储在数据库中。 注意Android还包含一个名为android.preference的包。 该包定义了实现应用程序首选项UI的类。

要查看更多示例,请查看开发者网站上的Android 数据存储文章。





sharedpreferences