Android利用反射机制为实体类属性赋值
在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制。下面是在我在android中如何利用java反射机制给实体类赋值。
在Android中利用反射机制为实体类属性赋值,首先需要导入一下两个包
import java.lang.reflect.Field;
import java.lang.reflect.Method;
给实体类赋值首先需要一个实体类,这里面我就简单的定义一个学生实体类StudentInfoBean:
public class StudentInfoBean {
private int id;
private String stuName;
private String stuGender;
private String stuIdCard;
private String stuClass;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuGender() {
return stuGender;
}
public void setStuGender(String stuGender) {
this.stuGender = stuGender;
}
public String getStuIdCard() {
return stuIdCard;
}
public void setStuIdCard(String stuIdCard) {
this.stuIdCard = stuIdCard;
}
public String getStuClass() {
return stuClass;
}
public void setStuClass(String stuClass) {
this.stuClass = stuClass;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
下面定义一个Utils类,在Utils类中定义了一下方法,请看代码:
public class Utils {
private static final String TAG = "Utils";
public Object setObjectValue(Object object, String json) throws Exception {
if (object == null)
return null;
Log.d(TAG, "setObjectValue");
Class<?> clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
Log.d(TAG, "field type:" + field.getName());// 打印字段的类型
if (field.getGenericType().toString().equals("class java.lang.String")) {
Method method = object.getClass().getMethod("set" + getMethodName(field.getName()), String.class);
method.invoke(object, parseJson(json, field.getName()));
}
if (field.getGenericType().toString().equals("class java.lang.Integer"))//
{
Method method = object.getClass().getMethod("set" + getMethodName(field.getName()), Integer.class);
method.invoke(object, parseJson(json, field.getName()));
}
}
return object;
}
/**
* 解析json
* */
private String parseJson(String json_string, String name) {
String str = "no info";
JSONObject json;
try {
json = new JSONObject(json_string);
json = json.getJSONObject("studentinfo");
str = json.getString(name);
} catch (JSONException e) {
e.printStackTrace();
}
return str;
}
/**
* 将属性名称的首字母变成大写
* */
public String getMethodName(String fieldName) {
byte[] bytes = fieldName.getBytes();
bytes[0] = (byte) (bytes[0] - 'a' + 'A');
return new String(bytes);
}
}
在上面的代码中定义了一个setObjectValue方法,该方法接收两个参数,第一个是Object类型的参数,在这里面接收的是一个StudentInfoBean对象,第二个参数是String类型的json数据,是填充到StudentInfoBean对象中的。
Android利用反射机制为实体类属性赋值的更多相关文章
- c# 利用反射动态给实体类对象赋值
转:http://blog.sina.com.cn/s/blog_659a572b0100xp5s.html 例子如下 using System; using System.Collections.G ...
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...
- android 利用反射机制获取drawable中所有的图片资源
public List<Map<String,Object>> getGridData() { list=new ArrayList<Map<String,Obje ...
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
一个普通的实体Person: private int id; private String name; private Date createdTime;...//其它字段// get set方法 . ...
- 反射获取config实体类属性并赋值
/// <summary> /// 将实体类存入config /// </summary> /// <param name="enity">&l ...
- java利用反射动态获取实体类的属性值
直接贴代码吧,有需要的话,可以根据自己的需要修改部分代码: public BigDecimal getByAttributeName(ThmdGwqriR thmdGwqriR, String att ...
- Spring2.0-applicationContext.xml中使用el表达式给实体类属性赋值被当成字符串-遁地龙卷风
(-1)写在前面 这两天读<javaweb开发王者归来>,学到Spring的PropertyPlaceholderConfigurer时出现一个问题,我已${jdbc.name}的形式赋值 ...
- Day14_82_反射机制输出整个类
利用反射机制输出整个类 代码实例 import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Ref ...
随机推荐
- WPF基础学习笔记整理 (一)
基础知识: WPF:Windows Presentation Foundation,用于Windows的现代图形显示系统: WPF用于编写应用程序的表示层: 引入“内置硬件加速”和“分辨率无关”: S ...
- json 保存
with open(mpath,"w") as k: dlist=[] for key in yaml_dict["data"]: dlist.append(y ...
- Jmeter 4.0 扩展插件
今天发现Jmeter4.0 也可以安装插件 而且比之前的版本的安装方法更为容易 https://jmeter-plugins.org/ https://jmeter-plugins.org/insta ...
- Codeforces 913D - Too Easy Problems
913D - Too Easy Problems 思路:二分check k 代码: #include<bits/stdc++.h> using namespace std; #define ...
- SqlServer使用表值函数汇总
先谈谈需求,我们先创建一张表,脚本如下: create table Cost ( Id ,) primary key,--编号 CostTime date,--时间 Num int--销售额 ); ' ...
- secs/gem协议
介绍SECS/GEM SEMI SECS/GEM标准概述 SECS/GEM是由国际半导体设备与材料协会(SEMI)制定的连接性标准.此连接性标准用于在设备和工厂的资讯和控制系统间建立通讯. SECS是 ...
- English trip -- VC(情景课)2 B Classroom objects
Vocabulary focus 核心词汇 Listen and repeat. 听并跟读 1. a dictionary 2. paper 3. a pen 4. a ruler 5. a stap ...
- 3-18 关于namespace,双冒号::的用法; SelfYield.
关于namespace,双冒号::的用法. 防止引用多个模块在一个文件/类中,有重名的对象.::可以调用类的类方法,和常量. class Foo BAR = "hello" ...
- Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载
随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 Material Design 设计语言中关于 Card 卡片概念的 ...
- dp练习(8)——数的划分
1039 数的划分 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 将整数 ...