Android共享偏好示例

我想在应用程序中检索用户input以备后用。

例如,提示用户input一周的全部7天,并在“星期一”,“星期二”等的editText框中键入。然后在应用程序中出现一个问题,询问你最喜欢的一天是什么? 而微调将显示一个下拉列表,他们input的date为用户select。

我想分享的喜好会为此工作,但我找不到一个很好的例子给我一个开始的地方。 任何帮助,将不胜感激。

在首选项中设置值:

// MY_PREFS_NAME - a static String variable like: //public static final String MY_PREFS_NAME = "MyPrefsFile"; SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); editor.putString("name", "Elena"); editor.putInt("idName", 12); editor.apply(); 

从首选项中检索数据:

 SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); String restoredText = prefs.getString("text", null); if (restoredText != null) { String name = prefs.getString("name", "No name defined");//"No name defined" is the default value. int idName = prefs.getInt("idName", 0); //0 is the default value. } 

更多信息:

使用共享首选项

共享首选项

创buildSharedPreferences

 SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); Editor editor = pref.edit(); 

将数据存储为KEY / VALUE对

 editor.putBoolean("key_name1", true); // Saving boolean - true/false editor.putInt("key_name2", "int value"); // Saving integer editor.putFloat("key_name3", "float value"); // Saving float editor.putLong("key_name4", "long value"); // Saving long editor.putString("key_name5", "string value"); // Saving string // Save the changes in SharedPreferences editor.commit(); // commit changes 

获取SharedPreferences数据

//如果key的值不存在,则返回第二个参数值 – 在这种情况下为null

 boolean userFirstLogin= pref.getBoolean("key_name1", true); // getting boolean int pageNumber=pref.getInt("key_name2", 0); // getting Integer float amount=pref.getFloat("key_name3", null); // getting Float long distance=pref.getLong("key_name4", null); // getting Long String email=pref.getString("key_name5", null); // getting String 

从SharedPreferences中删除键值

 editor.remove("key_name3"); // will delete key key_name3 editor.remove("key_name4"); // will delete key key_name4 // Save the changes in SharedPreferences editor.commit(); // commit changes 

清除SharedPreferences中的所有数据

  editor.clear(); editor.commit(); // commit changes 

如何初始化?

 // 0 - for private mode` SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); Editor editor = pref.edit(); 

如何在共享首选项中存储数据?

 editor.putString("key_name", "string value"); // Storing string 

要么

 editor.putInt("key_name", "int value"); //Storing integer 

不要忘记申请:

 editor.apply; 

如何从共享首选项检索数据?

 pref.getString("key_name", null); // getting String pref.getInt("key_name", null); // getting Integer 

希望他会帮助你:)

您可以创build您的自定义SharedPreference类

 public class YourPreference { private static YourPreference yourPreference; private SharedPreferences sharedPreferences; public static YourPreference getInstance(Context context) { if (yourPreference == null) { yourPreference = new YourPreference(context); } return yourPreference; } private YourPreference(Context context) { sharedPreferences = context.getSharedPreferences("YourCustomNamedPreference",Context.MODE_PRIVATE); } public void saveData(String key,String value) { SharedPreferences.Editor prefsEditor = sharedPreferences.edit(); prefsEditor .putString(key, value); prefsEditor.commit(); } public String getData(String key) { if (sharedPreferences!= null) { return sharedPreferences.getString(key, ""); } return ""; } } 

你可以得到YourPrefrence实例:

 YourPreference yourPrefrence = YourPreference.getInstance(context); yourPreference.saveData(YOUR_KEY,YOUR_VALUE); String value = yourPreference.getData(YOUR_KEY); 

Shared Preferences是用于将私有原始数据存储在键值对中的XML文件。 数据types包括布尔值浮点数整数 整数string

当我们想保存一些可以在整个应用程序中访问的数据时,一种方法是将其保存在全局variables中。 但是一旦申请closures,它就会消失。 另一种推荐的方法是保存在SharedPreference 。 保存在SharedPreferences文件中的数据在整个应用程序中都是可访问的,即使在应用程序closures或重新启动后也可以保存。

SharedPreferences将数据保存在键值对中,并可以以相同的方式访问。

您可以使用两种方法创buildSharedPreferences对象,

1)。 getSharedPreferences() :使用此方法,您可以创build多个SharedPreferences.and其第一个参数名为SharedPreferences

2)。 getPreferences() :使用此方法可以创buildSingle SharedPreferences

存储数据

添加variables声明/创build首选项文件

 public static final String PREFERENCES_FILE_NAME = "MyAppPreferences"; 

检索文件名句柄(使用getSharedPreferences)

 SharedPreferences settingsfile= getSharedPreferences(PREFERENCES_FILE_NAME,0); 

打开编辑器和添加键值对

 SharedPreferences.Editor myeditor = settingsfile.edit(); myeditor.putBoolean("IITAMIYO", true); myeditor.putFloat("VOLUME", 0.7) myeditor.putInt("BORDER", 2) myeditor.putLong("SIZE", 12345678910L) myeditor.putString("Name", "Amiyo") myeditor.apply(); 

不要忘记使用myeditor.apply()应用/保存,如上所示。

检索数据

  SharedPreferences mysettings= getSharedPreferences(PREFERENCES_FILE_NAME, 0); IITAMIYO = mysettings.getBoolean("IITAMIYO", false); //returns value for the given key. //second parameter gives the default value if no user preference found // (set to false in above case) VOLUME = mysettings.getFloat("VOLUME", 0.5) //0.5 being the default value if no volume preferences found // and similarly there are get methods for other data types 

我刚刚发现上面所有的例子都太混乱了,所以我写了自己的。 如果你知道自己在做什么,代码片段就没有问题了,但是像我这样的人不这样做呢?

想要一个剪切粘贴解决scheme吗? 那么在这里!

创build一个新的Java文件并将其称为密钥库。 然后粘贴这个代码:

 import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.util.Log; public class Keystore { //Did you remember to vote up my example? private static Keystore store; private SharedPreferences SP; private static String filename="Keys"; private Keystore(Context context) { SP = context.getApplicationContext().getSharedPreferences(filename,0); } public static Keystore getInstance(Context context) { if (store == null) { Log.v("Keystore","NEW STORE"); store = new Keystore(context); } return store; } public void put(String key, String value) {//Log.v("Keystore","PUT "+key+" "+value); Editor editor; editor = SP.edit(); editor.putString(key, value); editor.commit(); // Stop everything and do an immediate save! // editor.apply();//Keep going and save when you are not busy - Available only in APIs 9 and above. This is the preferred way of saving. } public String get(String key) {//Log.v("Keystore","GET from "+key); return SP.getString(key, null); } public int getInt(String key) {//Log.v("Keystore","GET INT from "+key); return SP.getInt(key, 0); } public void putInt(String key, int num) {//Log.v("Keystore","PUT INT "+key+" "+String.valueOf(num)); Editor editor; editor = SP.edit(); editor.putInt(key, num); editor.commit(); } public void clear(){ Editor editor; editor = SP.edit(); editor.clear(); editor.commit(); } public void remove(){ Editor editor; editor = SP.edit(); editor.remove(filename); editor.commit(); } } 

现在保存该文件,忘记它。 你完成了。 现在回到你的活动中,像这样使用它:

 public class YourClass extends Activity{ private Keystore store;//Holds our key pairs public YourSub(Context context){ store = Keystore.getInstance(context);//Creates or Gets our key pairs. You MUST have access to current context! int= store.getInt("key name to get int value"); string = store.get("key name to get string value"); store.putInt("key name to store int value",int_var); store.put("key name to store string value",string_var); } } 

如果你喜欢这个,给我投票,让其他人知道这是有用的!

 public class Preferences { public static final String PREF_NAME = "your preferences name"; @SuppressWarnings("deprecation") public static final int MODE = Context.MODE_WORLD_WRITEABLE; public static final String USER_ID = "USER_ID_NEW"; public static final String USER_NAME = "USER_NAME"; public static final String NAME = "NAME"; public static final String EMAIL = "EMAIL"; public static final String PHONE = "PHONE"; public static final String address = "address"; public static void writeBoolean(Context context, String key, boolean value) { getEditor(context).putBoolean(key, value).commit(); } public static boolean readBoolean(Context context, String key, boolean defValue) { return getPreferences(context).getBoolean(key, defValue); } public static void writeInteger(Context context, String key, int value) { getEditor(context).putInt(key, value).commit(); } public static int readInteger(Context context, String key, int defValue) { return getPreferences(context).getInt(key, defValue); } public static void writeString(Context context, String key, String value) { getEditor(context).putString(key, value).commit(); } public static String readString(Context context, String key, String defValue) { return getPreferences(context).getString(key, defValue); } public static void writeFloat(Context context, String key, float value) { getEditor(context).putFloat(key, value).commit(); } public static float readFloat(Context context, String key, float defValue) { return getPreferences(context).getFloat(key, defValue); } public static void writeLong(Context context, String key, long value) { getEditor(context).putLong(key, value).commit(); } public static long readLong(Context context, String key, long defValue) { return getPreferences(context).getLong(key, defValue); } public static SharedPreferences getPreferences(Context context) { return context.getSharedPreferences(PREF_NAME, MODE); } public static Editor getEditor(Context context) { return getPreferences(context).edit(); } } 

****使用首选项来使用以下值写入值: – ****

 Preferences.writeString(getApplicationContext(), Preferences.NAME, "dev"); 

****使用首选项来读取值使用: – ****

 Preferences.readString(getApplicationContext(), Preferences.NAME, ""); 

最好的方式来创build共享首选项和全球使用你需要创build像波纹pipe的类…

 public class PreferenceHelperDemo { private final SharedPreferences mPrefs; public PreferenceHelperDemo(Context context) { mPrefs = PreferenceManager.getDefaultSharedPreferences(context); } private String PREF_Key= "Key"; public String getKey() { String str = mPrefs.getString(PREF_Key, ""); return str; } public void setKey(String pREF_Key) { Editor mEditor = mPrefs.edit(); mEditor.putString(PREF_Key, pREF_Key); mEditor.commit(); } 

}

//写入共享首选项

 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score), newHighScore); editor.commit(); 

//从共享首选项读取

 SharedPreferences sharedPref getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.string.saved_high_score_default); long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue); 
 SharedPreferences mPref; SharedPreferences.Editor editor; public SharedPrefrences(Context mContext) { mPref = mContext.getSharedPreferences(Constant.SharedPreferences, Context.MODE_PRIVATE); editor=mPref.edit(); } public void setLocation(String latitude, String longitude) { SharedPreferences.Editor editor = mPref.edit(); editor.putString("latitude", latitude); editor.putString("longitude", longitude); editor.apply(); } public String getLatitude() { return mPref.getString("latitude", ""); } public String getLongitude() { return mPref.getString("longitude", ""); } public void setGCM(String gcm_id, String device_id) { editor.putString("gcm_id", gcm_id); editor.putString("device_id", device_id); editor.apply(); } public String getGCMId() { return mPref.getString("gcm_id", ""); } public String getDeviceId() { return mPref.getString("device_id", ""); } public void setUserData(User user){ Gson gson = new Gson(); String json = gson.toJson(user); editor.putString("user", json); editor.apply(); } public User getUserData(){ Gson gson = new Gson(); String json = mPref.getString("user", ""); User user = gson.fromJson(json, User.class); return user; } public void setSocialMediaStatus(SocialMedialStatus status){ Gson gson = new Gson(); String json = gson.toJson(status); editor.putString("status", json); editor.apply(); } public SocialMedialStatus getSocialMediaStatus(){ Gson gson = new Gson(); String json = mPref.getString("status", ""); SocialMedialStatus status = gson.fromJson(json, SocialMedialStatus.class); return status; } 
 Initialise here.. SharedPreferences msharedpref = getSharedPreferences("msh", MODE_PRIVATE); Editor editor = msharedpref.edit(); store data... editor.putString("id",uida); //uida is your string to be stored editor.commit(); finish(); fetch... SharedPreferences prefs = this.getSharedPreferences("msh", Context.MODE_PRIVATE); uida = prefs.getString("id", ""); 

共享偏好是如此容易学习,所以看看这个关于sharedpreference的简单教程

导入android.os.Bundle; 导入android.preference.PreferenceActivity;

 public class UserSettingActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); } } 
 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score), newHighScore); editor.commit(); 

你也可以看看我为此写的一个过去的示例项目 。 我在本地保存一个名字,并根据用户的请求或应用程序的启动进行检索。

但是,在这个时候,使用commit (而不是apply )来保存数据会更好。 更多信息在这里 。

  // Create object of SharedPreferences. SharedPreferences sharedPref = getSharedPreferences("mypref", 0); //now get Editor SharedPreferences.Editor editor = sharedPref.edit(); //put your value editor.putString("name", required_Text); //commits your edits editor.commit(); // Its used to retrieve data SharedPreferences sharedPref = getSharedPreferences("mypref", 0); String name = sharedPref.getString("name", ""); if (name.equalsIgnoreCase("required_Text")) { Log.v("Matched","Required Text Matched"); } else { Log.v("Not Matched","Required Text Not Matched"); }