package com.overlook.weagree.util;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.util.Log; import com.overlook.weagree.entity.CurrentUser; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map; public class CurrentUserUtil { private static final String TAG = "CurrentUserUtil"; private static final String CURRENT_USER = "current-user"; private static final Map<String,Method> SETTER = new HashMap<>(); private static final Map<String,Method> GETTER = new HashMap<>(); static {
if (SETTER.isEmpty() || GETTER.isEmpty()) {
Method[] methods = CurrentUser.class.getDeclaredMethods();
for (Method method : methods) {
String methodName = method.getName().toLowerCase(Locale.ENGLISH);
if (methodName.startsWith("set")) {
SETTER.put(methodName.substring(3),method);
}else{
GETTER.put(methodName.substring(3),method);
}
}
}
} public static void exit(Activity activity){
SharedPreferences sharedPref = activity.getSharedPreferences(CURRENT_USER,Context.MODE_PRIVATE);
if ( sharedPref == null ) {
return;
}
sharedPref.edit().clear().commit();
} public static CurrentUser getCurrentUser(Activity activity,Class mClass){ SharedPreferences sharedPref = activity.getSharedPreferences(CURRENT_USER,Context.MODE_PRIVATE);
if ( sharedPref == null ) {
return null;
}
CurrentUser currentUser = new CurrentUser(); Field[] fields = CurrentUser.class.getDeclaredFields(); for (Field field : fields) {
String fieldName = field.getName().toLowerCase(Locale.ENGLISH);;
Class type = field.getType();
Object value;
if (type.isAssignableFrom(Long.class)) {
value = sharedPref.getLong(fieldName,0L);
}else if (type.isAssignableFrom(Boolean.class)){
value = sharedPref.getBoolean(fieldName,false);
}else if (type.isAssignableFrom(Integer.class)) {
value = sharedPref.getInt(fieldName,0);
}else{
value = sharedPref.getString(fieldName,null);
} Method method = SETTER.get(fieldName); try {
if ( method == null ) {
Log.d(TAG, "getCurrentUser: "+fieldName);
}else{
method.invoke(currentUser,value);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} return currentUser;
} public static Boolean putCurrentUser(Activity activity,CurrentUser currentUser){
SharedPreferences sharedPref = activity.getSharedPreferences(CURRENT_USER,Context.MODE_PRIVATE); Field[] fields = CurrentUser.class.getDeclaredFields(); SharedPreferences.Editor editor = sharedPref.edit(); for (Field field : fields) {
String fieldName = field.getName().toLowerCase(Locale.ENGLISH);
Class type = field.getType();
Method method = GETTER.get(fieldName); try {
Object value = method.invoke(currentUser); if ( value == null ) {
continue;
} if (type.isAssignableFrom(Long.class)) {
Long longVal = (Long) value;
if ( ! longVal.equals(0L)){
editor.putLong(fieldName,(Long)value);
}
}else if (type.isAssignableFrom(Boolean.class)){
editor.putBoolean(fieldName,(Boolean)value);
}else if (type.isAssignableFrom(Integer.class)) {
Integer intVal = (Integer)value;
if ( ! intVal.equals(0)){
editor.putInt(fieldName,(Integer)value);
}
}else{
editor.putString(fieldName,(String)value);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
return editor.commit();
} }

  

SharedPreference映射Java类的更多相关文章

  1. hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化

    hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...

  2. MyBatis里json型字段到Java类的映射

    一.简介 我们在用MyBatis里,很多时间有这样一个需求:bean里有个属性是非基本数据类型,在DB存储时我们想存的是json格式的字符串,从DB拿出来时想直接映射成目标类型,也即json格式的字符 ...

  3. 数据表-java类的映射

    1.一个数据表对应一个java类 2.数据表的字段对应java类的属性 3.一对多的数据表关系 一方用一个java对象表示 多方用一个java对象数组表示 4.多对多的数据表关系:采用中间表,将多对多 ...

  4. 如何用Java类配置Spring MVC(不通过web.xml和XML方式)

    DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...

  5. 一种从JSON数据创建Java类的高效办法

    <一种从JSON数据创建Java类的高效办法> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs JSON格式的数据经常会遇到,比如调用Web服 ...

  6. 普通Java类获取spring 容器的bean的5种方法

    方法一:在初始化时保存ApplicationContext对象方法二:通过Spring提供的工具类获取ApplicationContext对象方法三:继承自抽象类ApplicationObjectSu ...

  7. 探索Windows命令行系列(7):通过命令编译C#类和Java类

    1.编译 C# 类 1.1.C# 编译工具 1.2.编译一个 C# 类 1.3.编译多个 C# 类 2.编译 Java 类 2.1.Java 编译工具 2.2.编译 Java 类 3.组合命令符 4. ...

  8. Hibernate框架学习之注解映射实体类

         前面的相关文章中,我们已经介绍了使用XML配置文件映射实体类及其各种类型的属性的相关知识.然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射 ...

  9. Matlab调用Java类

    第一步:定位Matlab中Java环境的ext目录 新建一个M script文件,或者直接在Matlab的交互式命令行中输入: >> disp(java.lang.System.getPr ...

随机推荐

  1. 提升node.js中使用redis的性能

    问题初现 某基于node.js开发的业务系统向外提供了一个dubbo服务,提供向第三方缓存查询.设置多项业务数据并聚合操作结果.在QPS达到800时(两台虚拟机,每台机器4Core8G4node进程) ...

  2. 2019十大安卓手游折扣平台app排行榜

    2019游戏版号陆续开放,玩家又有许多好游戏可以玩了. 小编就以当前最热门的十个游戏来点评手游折扣平台App排行榜吧! 排名第一的游戏: 少年西游记-新征程 老平台,集成SDK,良心平台,覆盖全网游戏 ...

  3. [系统相关]WPS Office 2016 专业增强版 10.8.0.6470 免序列号无限制

    WPS Office (10.8.0.6470)  新增功能列表 ============================================= 改进功能列表 ------------ W ...

  4. 理解 OAuth2.0

    文章转载于阮一峰老师的博客:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 参考文章:https://learnku.com/article ...

  5. luogu准备复习(学习)题单

    矩阵乘法 P1306 exbsgs P4195 网络流(割点) P1345 主席树 P3302

  6. 承接微信小程序外包 H5外包就找北京动点软件开发团队

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900288 ...

  7. libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

    In Xcode 9 and Swift 4: Print exception stack to know the reason of the exception: Go to show break ...

  8. 如何解决WebBrowser.DocumentCompleted事件的多次调用

    转载:https://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.html 关于DocumentCompleted事件,MSDN给出的解释是在文档 ...

  9. 简单谈谈$.merge()

    var arr1 = [1,2,3]; var arr2 = [1,2,3]; console.log($.merge(arr1,arr2)) //[1,2,3,1,2,3],可见数组间只是合并,不会 ...

  10. postman(九):postman接口测试脚本集成到jenkins

    本篇的目的是实现使用jenkins远程执行postman接口测试脚本 准备工作:一台linux服务器(可以用虚拟机搭建一个),linux服务器上安装好node.js.newman,部署好jenkins ...