在我的應用程序中,爲了存儲我使用SharedPreferences的數據。我能夠從SharedPreferences中添加和檢索數據。我的問題是當我切換到New user
時,SharedPreferences沒有爲new user
創建。它始終從owner
獲取數據,而不是從Newuser
獲取數據。如何創建SharedPreferences,以便創建owner
和Newuser
?多用戶的共享首選項
謝謝
在我的應用程序中,爲了存儲我使用SharedPreferences的數據。我能夠從SharedPreferences中添加和檢索數據。我的問題是當我切換到New user
時,SharedPreferences沒有爲new user
創建。它始終從owner
獲取數據,而不是從Newuser
獲取數據。如何創建SharedPreferences,以便創建owner
和Newuser
?多用戶的共享首選項
謝謝
像這樣使用。
SharedPreferences.Editor editor = getSharedPreferences("first user", MODE_PRIVATE).edit();
editor.putString("firstusername", "bcd");
editor.putInt("password", 12);
editor.commit();
//for seconduser.
SharedPreferences.Editor editor2 = getSharedPreferences("second user", MODE_PRIVATE).edit();
editor2.putString("secondusername", "abc");
editor2.putInt("password", 12);
editor.commit();
// for retriving。
SharedPreferences prefs = getSharedPreferences("SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String restoredText = prefs.getString("firstusername", null);
if (restoredText != null) {
String name1 = prefs.getString("firstusername", "No name defined");
// for seconduser retriving
SharedPreferences prefs = getSharedPreferences("SharedPreferences prefs = getSharedPreferences("secon user", MODE_PRIVATE);
String restoredText = prefs.getString("secondtusername", null);
if (restoredText != null) {
String name2 = prefs.getString("secondtusername", "No name defined");
}
你將不得不用戶標識擁有者和新用戶之間進行區分。如果沒有,那麼你必須保持它。
您可以使用下面的單個SharedPreferences
util類來處理所有。我做了singleton
並用enum
它來保證type-safety
。
public class SharedPreferencesUtil
{
public enum KEY
{
FIRST_TIME_USER("first_time"),
REGISTERED_USER("registered"),
SKIPPED_REGISTRATION("is_skipped_registration"),
DEVICE_INFO("device_information"),
DEVICE_LATITUDE("device_latitude"),
DEVICE_LONGITUDE("device_longitude"),
ONLINE_APPS("online_apps");
private final String value;
KEY(String value)
{
this.value = value;
}
public String getValue()
{
return this.value;
}
}
private static SharedPreferencesUtil sharedPreferencesUtil = null;
private static SharedPreferences sharedPreferences = null;
private SharedPreferencesUtil(Context context, String spName)
{
sharedPreferences = QCleaner.getInstance().getActivity().getSharedPreferences("mobi_pref", Context.MODE_PRIVATE);
}
public static synchronized SharedPreferencesUtil getInstance(Context context, String spName)
{
if(sharedPreferencesUtil == null)
{
sharedPreferencesUtil = new SharedPreferencesUtil(context, pName);
}
return sharedPreferencesUtil;
}
public boolean hasKey(KEY key)
{
boolean isKeyExist = false;
/*if(sharedPreferences.contains(key.getValue()) && !TextUtils.isEmpty(sharedPreferences.getString(key.getValue(), "")))
{
isKeyExist = true;
}*/
if(sharedPreferences.contains(key.getValue()))
{
isKeyExist = true;
}
return isKeyExist;
}
public boolean saveString(KEY key, String value)
{
return sharedPreferences.edit().putString(key.getValue(), value).commit();
}
public boolean saveInt(KEY key, int value)
{
return sharedPreferences.edit().putInt(key.getValue(), value).commit();
}
public boolean saveBoolean(KEY key, boolean value)
{
return sharedPreferences.edit().putBoolean(key.getValue(), value).commit();
}
public boolean saveFloat(KEY key, float value)
{
return sharedPreferences.edit().putFloat(key.getValue(), value).commit();
}
public boolean saveDataLong(KEY key, long value)
{
return sharedPreferences.edit().putLong(key.getValue(), value).commit();
}
/*public boolean saveDataStringSetInSharedPreference(String key, Set value)
{
return sharedPreferences.edit().putStringSet(key, value).commit();
}*/
public String getString(KEY key)
{
if(sharedPreferences.contains(key.getValue()))
{
return sharedPreferences.getString(key.getValue(), "");
}
else
{
return null;
}
}
public boolean getBoolean(KEY key)
{
if(sharedPreferences.contains(key.getValue()))
{
return sharedPreferences.getBoolean(key.getValue(), false);
}
else
{
return false;
}
}
public float getFloat(KEY key)
{
if(sharedPreferences.contains(key.getValue()))
{
return sharedPreferences.getFloat(key.getValue(), 0.0f);
}
else
{
return 0.0f;
}
}
public float getLong(KEY key)
{
if(sharedPreferences.contains(key.getValue()))
{
return sharedPreferences.getLong(key.getValue(), 0L);
}
else
{
return 0L;
}
}
public boolean removeKey(KEY key)
{
boolean isDeleted = false;
if(sharedPreferences.contains(key.getValue()))
{
isDeleted = sharedPreferences.edit().remove(key.getValue()).commit();
}
return isDeleted;
}
}
如何使用?
SharedPreferencesUtil.getInstance(context, your_shared_preference_name).saveString(SharedPreferencesUtil.KEY.ONLINE_APPS, object.toString());
如果使用單一的名稱共享的偏好,那麼你可以自定義它,你就不必通過每次context
和sharedpreference
名。
更改每個新用戶的shareprefrence密鑰名稱,以便存儲和提取特定的用戶數據 –
@SaurabhBhandari感謝您的rply如何獲得新用戶?我的意思是用戶的名字或ID? –
使用唯一的密鑰,如用戶名shareprefrence密鑰,所以當用戶切換它從對應的密鑰 –