2017-10-21 208 views
0

我已经创建了一个用户登录应用程序。登录后,它将所有检索到的数据存储到我的sharedPrefManager,但之后我希望它每次重新启动应用程序或更新我的用户详细信息时检查更新并获取更改的数据,或者每次打开profile_Activity(Specific)时刷新一次。如何在Android中更新SharedPrefManager

这里是我的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); 
    } 

} 

回答

0

我有一个sharedPreference类saperate -

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

在这里,在第一类为AppPreference.java另一类为Login.java在偏好设置所有数据,然后你可以在你的应用程序的任何地方获取数据,例如见得到所有数据在Profile.java

希望这可以帮助你。

+0

因此,您是说每次重新启动应用程序时,都使用AppPreference.java中存储的密钥进行登录?并更新profile.java中的键值? –

+0

是的,您可以通过API响应设置SharedPreference中的所有字段数据,并将它们分配到您的应用程序中,这通过使用此类很简单,只需调用设置数据的“setStringPref”和获取数据的“getStringPref”即可。 如果你需要每次应用程序重新启动,那么你需要从飞溅API得到daat。 希望你明白我对你说的话,这对你有所帮助。 – InsaneCat