2017-03-31 137 views
0

在我的應用程序中,爲了存儲我使用SharedPreferences的數據。我能夠從SharedPreferences中添加和檢索數據。我的問題是當我切換到New user時,SharedPreferences沒有爲new user創建。它始終從owner獲取數據,而不是從Newuser獲取數據。如何創建SharedPreferences,以便創建ownerNewuser多用戶的共享首選項

謝謝

+0

更改每個新用戶的shareprefrence密鑰名稱,以便存儲和提取特定的用戶數據 –

+0

@SaurabhBhandari感謝您的rply如何獲得新用戶?我的意思是用戶的名字或ID? –

+0

使用唯一的密鑰,如用戶名shareprefrence密鑰,所以當用戶切換它從對應的密鑰 –

回答

0

像這樣使用。

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"); 

}

0

你將不得不用戶標識擁有者和新用戶之間進行區分。如果沒有,那麼你必須保持它。

您可以使用下面的單個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()); 

如果使用單一的名稱共享的偏好,那麼你可以自定義它,你就不必通過每次contextsharedpreference名。