2017-10-21 34 views
0

J'ai créé une application de connexion utilisateur. Après la connexion, je stocke toutes les données récupérées dans mon sharedPrefManager mais après cela, je veux vérifier la mise à jour et obtenir les données modifiées chaque fois que je redémarre mon application ou que je mets à jour mes informations utilisateur ou que je l'actualise profile_Activity(Specific).Comment garder SharedPrefManager à jour dans android

Voici mon SharedPref:

public class SharedPrefManager { 

    private static SharedPrefManager mInstance; 
    private static Context mCtx; 
    private static final String SHARED_PREF_NAME = "mysharedpref12"; 
    private static final String KEY_USERNAME = "username"; 
    private static final String KEY_USER_MAIL = "usermail"; 
    private static final String KEY_USER_ID = "userid"; 
    private static final String KEY_PHONE = "userphone"; 
    private static final String KEY_NAME = "usename"; 
    private static final String KEY_PIN = "pin"; 
    private static final String KEY_SUR = "surname"; 
    private static final String KEY_ADD = "address"; 

    private SharedPrefManager(Context context) { 
     mCtx = context; 
    } 

    public static synchronized SharedPrefManager getInstance(Context context) { 
     if (mInstance == null) { 
      mInstance = new SharedPrefManager(context); 
     } 
     return mInstance; 
    } 

    public boolean userLogin(int id, int pin, String phone, String username, String mail, String name, String surname, String address/**, String catagory*/){ 

     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 

     editor.putInt(KEY_USER_ID, id); 
     editor.putInt(KEY_PIN, pin); 
     editor.putString(KEY_PHONE, phone); 
     editor.putString(KEY_USERNAME, username); 
     editor.putString(KEY_USER_MAIL, mail); 
     editor.putString(KEY_NAME, name); 
     editor.putString(KEY_SUR, surname); 
     editor.putString(KEY_ADD, address); 
     //editor.putString(KEY_CATA, catagory); 

     editor.apply(); 

     return true; 

    } 

    public boolean isLoggedIn(){ 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     if (sharedPreferences.getString(KEY_USERNAME, null) != null){ 
      return true; 
     } 
      return false; 
    } 

    public boolean logOut(){ 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.clear(); 
     editor.apply(); 
     return true; 
    } 

    public int getid(){ 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getInt(KEY_USER_ID, 0); 
     //return sharedPreferences.getInt(KEY_USER_ID, Integer.parseInt(null)); 
    } 

    public int getpin(){ 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getInt(KEY_PIN,0); 
     /*SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getInt(KEY_PIN, Integer.parseInt(null));*/ 
    } 

    public String getUsername(){ 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(KEY_USERNAME, null); 
    } 

    public String getUserEmail(){ 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(KEY_USER_MAIL, null); 
    } 

    public String getUserPhone(){ 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(KEY_PHONE, null); 
    } 

    public String getName() { 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(KEY_NAME, null); 
    } 

    public String getSurname() { 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(KEY_SUR, null); 
    } 

    public String getAddress() { 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(KEY_ADD, null); 
    } 

} 

Répondre

0

J'ai une classe saperate pour sharedPreference: -

1> AppPreference.java

public class AppPreference { 


    public static final String PREF_USERID = "prefUserId"; 
    public static final String PREF_FNAME = "prefFname"; 
    public static final String PREF_LNAME = "prefLname"; 
    public static final String PREF_PHONE = "prefphone"; 


    public static final void setStringPref(Context context, String prefKey, String key, String value) { 
     SharedPreferences sp = context.getSharedPreferences(prefKey, 0); 
     SharedPreferences.Editor edit = sp.edit(); 
     edit.putString(key, value); 
     edit.commit(); 
    } 

    public static final String getStringPref(Context context, String prefName, String key) { 
     SharedPreferences sp = context.getSharedPreferences(prefName, 0); 
     return sp.getString(key, ""); 
    } 

    public static final class PREF_KEY { 
     public static final String USERID = "userid"; 
     public static final String FNAME = "fname"; 
     public static final String LNAME = "lname"; 
     public static final String PHONE = "phone"; 
    } 
} 

2> LoginActivity.java

if (jsonObject.toString().contains(Constant.JSON_KEY.RESPONSE)) { 
         JSONObject response = jsonObject.getJSONObject(Constant.JSON_KEY.RESPONSE); 

         String userId = response.getString(Constant.JSON_KEY.ID); 
         String fname = response.getString(Constant.JSON_KEY.FNAME); 
         String lname = response.getString(Constant.JSON_KEY.LNAME); 
         String phone = response.getString(Constant.JSON_KEY.PHONE); 

         SignUpDetailsClass signUpDetailsClass = new SignUpDetailsClass(); 
         signUpDetailsClass.setId(userId); 
         signUpDetailsClass.setFname(fname); 
         signUpDetailsClass.setLname(lname); 
         signUpDetailsClass.setPhone(phone); 

         **// store data in sharedPreference** 
         AppPreference.setStringPref(context, AppPreference.PREF_USERID, AppPreference.PREF_KEY.USERID, userId); 
         AppPreference.setStringPref(context, AppPreference.PREF_FNAME, AppPreference.PREF_KEY.FNAME, fname); 
         AppPreference.setStringPref(context, AppPreference.PREF_LNAME, AppPreference.PREF_KEY.LNAME, lname); 
         AppPreference.setStringPref(context, AppPreference.PREF_PHONE, AppPreference.PREF_KEY.PHONE, phone); 
    } 

3> Profile.java

     **// get data from sharedPreference** 
         String userId = AppPreference.getStringPref(context, AppPreference.PREF_USERID, AppPreference.PREF_KEY.USERID); 
         String strMob = AppPreference.getStringPref(context, AppPreference.PREF_PHONE, AppPreference.PREF_KEY.PHONE); 
         String strFirstName = AppPreference.getStringPref(context, AppPreference.PREF_FNAME, AppPreference.PREF_KEY.FNAME); 
         String strLastName = AppPreference.getStringPref(context, AppPreference.PREF_LNAME, AppPreference.PREF_KEY.LNAME); 

Ici, dans la première classe est un AppPreference.java une autre classe est pour Login.java à mis toutes les données de préférence et vous pouvez obtenir des données n'importe où dans votre application par exemple voir obtenir toutes les données dans Profile.java

J'espère que cela vous aide.

+0

Donc, vous dites que chaque fois que vous redémarrez votre application, vous vous connectez en utilisant les clés stockées dans AppPreference.java? et met à jour les valeurs clés dans profile.java? –

+0

Oui, vous pouvez définir toutes les données de champs dans SharedPreference à partir de la réponse API et aller partout dans votre application c'est trop facile en utilisant cette classe et en appelant simplement "setStringPref" pour set data et "getStringPref" pour obtenir des données. Si vous avez besoin à chaque fois de redémarrer l'application, vous devez obtenir daat de l'API splash. J'espère que vous obtenez ce que je vous dis et ça vous aide. – InsaneCat