用于创建一次性活动的 Android 共享首选项(示例)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23024831/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android Shared preferences for creating one time activity (example)
提问by user3104719
I have three activities A,B and C where A and B are forms and after filling and saving the form data in database(SQLITE). I am using intent from A to B and then B to C.What i want is that every time I open my app I want C as my home screen and not A and B anymore.
我有三个活动 A、B 和 C,其中 A 和 B 是表单,并将表单数据填充并保存在数据库(SQLITE)中之后。我正在使用从 A 到 B 然后 B 到 C 的意图。我想要的是每次打开我的应用程序时,我都希望 C 作为我的主屏幕,而不是 A 和 B 了。
I guess shared preferences would work for this, but I cannot find a good example to give me a starting place. Any help would be appreciated.
我想共享偏好对此有用,但我找不到一个很好的例子来给我一个起点。任何帮助,将不胜感激。
回答by Jorgesys
Setting values in Preference:
在首选项中设置值:
// 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();
Retrieve data from preference:
从首选项中检索数据:
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
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.
more info:
更多信息:
回答by Krausz Lóránt Szilveszter
Create SharedPreferences
创建共享首选项
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
Storing data as KEY/VALUE pair
将数据存储为 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.apply(); // commit changes
Get SharedPreferences data
获取 SharedPreferences 数据
// If value for key not exist then return second param value - In this case null
// 如果键的值不存在,则返回第二个参数值 - 在这种情况下为 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
Deleting Key value from SharedPreferences
从 SharedPreferences 中删除 Key 值
editor.remove("key_name3"); // will delete key key_name3
editor.remove("key_name4"); // will delete key key_name4
// Save the changes in SharedPreferences
editor.apply(); // commit changes
Clear all data from SharedPreferences
清除 SharedPreferences 中的所有数据
editor.clear();
editor.apply(); // commit changes
回答by Omi Sparky
How to Intialize?
如何初始化?
// 0 - for private mode`
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
How to Store Data In Shared Preference?
如何在共享首选项中存储数据?
editor.putString("key_name", "string value"); // Storing string
OR
或者
editor.putInt("key_name", "int value"); //Storing integer
And don't forget to apply :
并且不要忘记申请:
editor.apply();
How to retrieve Data From Shared Preferences ?
如何从共享首选项中检索数据?
pref.getString("key_name", null); // getting String
pref.getInt("key_name", 0); // getting Integer
Hope this will Help U :)
希望这会帮助你 :)
回答by Rahul Parihar
You can create your custom SharedPreference class
您可以创建自定义 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 "";
}
}
You can get YourPrefrence instance like:
您可以像这样获得 YourPrefence 实例:
YourPreference yourPrefrence = YourPreference.getInstance(context);
yourPreference.saveData(YOUR_KEY,YOUR_VALUE);
String value = yourPreference.getData(YOUR_KEY);
回答by R M
I just found all the above examples just too confusing, so I wrote my own. Code fragments are fine if you know what you're doing, but what about people like me who don't?
我只是发现上面所有的例子都太混乱了,所以我自己写了一个。如果你知道自己在做什么,代码片段很好,但是像我这样不知道的人呢?
Want a cut-n-paste solution instead? Well here it is!
想要一个简单的粘贴解决方案吗?好吧,它来了!
Create a new java file and call it Keystore. Then paste in this code:
创建一个新的 java 文件并将其命名为 Keystore。然后粘贴这段代码:
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 = 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 = SP.edit();
editor.putInt(key, num);
editor.commit();
}
public void clear(){ // Delete all shared preferences
Editor editor = SP.edit();
editor.clear();
editor.commit();
}
public void remove(){ // Delete only the shared preference that you want
Editor editor = SP.edit();
editor.remove(filename);
editor.commit();
}
}
Now save that file and forget about it. You're done with it. Now go back into your activity and use it like this:
现在保存该文件并忘记它。你已经完成了。现在回到你的活动中并像这样使用它:
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);
}
}
回答by IntelliJ Amiya
Shared Preferences
are XML files to store private primitive data in key-value pairs. Data Types include Booleans, floats, ints, longs, and strings.
Shared Preferences
是将私有原始数据存储在键值对中的 XML 文件。数据类型包括布尔值、浮点数、整数、长整数和字符串。
When we want to save some data which is accessible throughout the application, one way to do is to save it in global variable. But it will vanish once the application is closed. Another and recommended way is to save in SharedPreference
. Data saved in SharedPreferences file is accessible throughout the application and persists even after the application closes or across reboots.
当我们想要保存一些可以在整个应用程序中访问的数据时,一种方法是将其保存在全局变量中。但是一旦应用程序关闭它就会消失。另一种推荐的方法是保存在SharedPreference
. 保存在 SharedPreferences 文件中的数据可以在整个应用程序中访问,并且即使在应用程序关闭或重新启动后仍然存在。
SharedPreferencessaves the data in key-value pair and can be accessed in same fashion.
SharedPreferences将数据保存在键值对中,并且可以以相同的方式访问。
You can create Object of SharedPreferences
using two methods,
您可以SharedPreferences
使用两种方法创建对象,
1).getSharedPreferences(): Using this methods you can create Multiple SharedPreferences.and its first parameters in name of SharedPreferences
.
1)。getSharedPreferences():使用此方法,您可以创建 Multiple SharedPreferences. 及其名称为 的第一个参数SharedPreferences
。
2).getPreferences(): Using this method you can create Single SharedPreferences
.
2)。getPreferences():使用此方法您可以创建 Single SharedPreferences
。
Storing Data
存储数据
Add a Variable declaration/ Create Preference File
添加变量声明/创建首选项文件
public static final String PREFERENCES_FILE_NAME = "MyAppPreferences";
Retrieve a handle to filename (using getSharedPreferences)
检索文件名的句柄(使用 getSharedPreferences)
SharedPreferences settingsfile= getSharedPreferences(PREFERENCES_FILE_NAME,0);
Open Editor and Add key-value pairs
打开编辑器并添加键值对
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();
Don't forget to apply/save using myeditor.apply()
as shown above.
不要忘记应用/保存使用myeditor.apply()
如上所示。
Retrieving Data
检索数据
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
回答by smit modi
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();
}
}
****Use Preferences to Write value using:-****
****使用首选项写入值使用:-****
Preferences.writeString(getApplicationContext(),
Preferences.NAME, "dev");
****Use Preferences to Read value using:-****
****使用首选项读取值使用:-****
Preferences.readString(getApplicationContext(), Preferences.NAME,
"");
回答by varotariya vajsi
Best way to create SharedPreference
and for global usage you need to create a class like below:
创建SharedPreference
和全局使用的最佳方法,您需要创建一个如下所示的类:
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.apply();
}
}
回答by CHirag RAmi
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;
}
回答by Syed Junaid
Write to Shared Preferences
写入共享首选项
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
Read from Shared Preferences
从共享首选项中读取
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);