import android.app.Activity;
import android.content.SharedPreferences;
import android.text.TextUtils;
import com.google.gson.Gson;
/**
* 本地持久化存储,生成bean转json保存到SharedPreferences
* 使用:
*
* //保存登录信息
* MySetting.UserInfo mUserInfo = MySetting.getInstance().getUserInfo();
* mUserInfo.token = "XXXXXX";
* MySetting.getInstance().setUserInfo(mUserInfo);
*
* //启动页判断是否已登录
* if(MySetting.getInstance().getUserInfo().isLogin()){//已登录
* startActivity(new Intent(SplashActivity.this, MainTabActivity.class));
* }else{
* startActivity(new Intent(SplashActivity.this, LoginActivity.class));
* }
*
* //退出登录
* MySetting.getInstance().setUserInfo(null);
* startActivity(new Intent(getActivity(), LoginActivity.class));
*/
public class MySetting {
//这里的配置文件要求是单例的
private static MySetting mMySetting;
//向本地文件写入json内容的文件名与key
private static String FILENAME_AND_KEY = MySetting.class.getSimpleName();
//当前本地保存的用户信息
private UserInfo mUserInfo = new UserInfo();
/*=====================LifeCycle==================*/
/**
* 获取单例 ,
* 1 应用启动时从本地获取。以后都从内存中读取
* 2 本地获取不到时,创建默认配置信息
* 注:更改时,先个性当前数据内容,再调用saveData()方法保存到本地。
*
* @return 得到当前应用所需求的配置信息实例
*/
public static MySetting getInstance() {
if (mMySetting == null) {
synchronized (MySetting.class) {
if (mMySetting == null) {//当前为空从本地取
mMySetting = getData();
}
if (mMySetting == null) {//本地没取到数据,说明是首次安装应用,设置默认信息
mMySetting = new MySetting();
} else {//本地有值,判断本地的值的版本号与当前app的版本号是否相同
// MyLog.info(TAG + "==getInstance,本地有值,判断本地的值的版本号与当前app的版本号是否相同");
// if (mMySetting.getEnvirInfo().VERSION_CODE < BuildConfig.VERSION_CODE) {//小于当前版本,进行清空配置操作
//// MyLog.info(TAG + "==getInstance,小于当前版本,进行清空配置操作");
// mMySetting.setEnvirInfo(new EnvirInfo());
// }
}
}
}
return mMySetting;
}
/**
* 获取用户信息
*
* @return 没有时,返回空对象,不是null
*/
public UserInfo getUserInfo() {
mUserInfo = mUserInfo == null ? new UserInfo() : mUserInfo;
return mUserInfo;
}
/**
* 设置用户信息
*/
public void setUserInfo(UserInfo mUserInfo) {
this.mUserInfo = mUserInfo;
saveData();
}
/*==================InnerClass==============*/
/**
* 当前用户app本地保存的用户信息
*/
public static class UserInfo {
public String token = "";
/**
*
* @return true:已登录,false:未登录
*/
public boolean isLogin() {
if (TextUtils.isEmpty(token)) {
return false;
}
return true;
}
}
/*====================ChildFunction============*/
//保存当前数据
private boolean saveData() {
SharedPreferences.Editor editor = MyApplication.getMyApplication().getSharedPreferences(FILENAME_AND_KEY, Activity.MODE_PRIVATE).edit();
editor.putString(FILENAME_AND_KEY, toJson(this));
boolean isEditorSucc = editor.commit();
return isEditorSucc;
}
// 获取本地setting数据
// @return 异常时为null
private static MySetting getData() {
SharedPreferences mSharedPreferences = MyApplication.getMyApplication().getSharedPreferences(FILENAME_AND_KEY, Activity.MODE_PRIVATE);
String jjbsetingStr = mSharedPreferences.getString(FILENAME_AND_KEY, null);
return fromJson(jjbsetingStr, MySetting.class);
}
/**
* 将对象转换成json字符串
* (此方法会引导 某些手机方法不再向下进行了。)
*
* @param obj 要转换json的对象
* @return 对应的json字符串,失败时为null
*/
public static String toJson(Object obj) {
try {
return new Gson().toJson(obj);
} catch (Exception e) {
// JJBLog.e(JsonManager.class.getName(), "e-->" + e.getMessage());
return null;
}
}
/**
* 将json字符串转换成对象
*
* @param jsonStr 需要解析对象的json字符串
* @param cls 要解析对象类型的.class
* @param <T> 请求与返回是相关的对象类型
* @return 对应的对象,失败时返回null
*/
public static <T> T fromJson(String jsonStr, Class<T> cls) {
try {
return new Gson().fromJson(jsonStr, cls);
} catch (Exception e) {
return null;
}
}
}
Android工作整理-本地保存用户等信息
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...