2017-03-31 57 views
0

私のアプリでは、データを保存するためにSharedPreferencesを使用しています。 SharedPreferencesからデータを追加したり取得したりできます。私の問題は、New userに切り替えたとき、SharedPreferencesがnew userのために作成されていないときです。 ownerのデータは常にNewuserからフェッチされています。 SharedPreferencesを作成してownerNewuserの両方を作成する方法マルチユーザの共有設定

ありがとう

+0

新しいユーザーごとにshareprefrenceキー名を変更して、特定のユーザーデータを保存して取得するようにします –

+0

@SaurabhBhandari新しいユーザーを取得する方法を教えてください。私はユーザーの名前やIDを意味しますか? –

+0

shareprefrenceキーのusernameのような一意のキーを使用してください。ユーザーが対応するキー –

答えて

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

// retriving。あなたが所有者と新規ユーザーを区別するためにユーザ識別子を持つことになり

0

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

あなたは、単一の名前の共有プリファレンスを使用している場合、あなたはそれをカスタマイズすることができ、あなたがcontextsharedpreference名前たびに渡す必要はありません。