在做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利用反射机制为实体类属性赋值的更多相关文章

  1. c# 利用反射动态给实体类对象赋值

    转:http://blog.sina.com.cn/s/blog_659a572b0100xp5s.html 例子如下 using System; using System.Collections.G ...

  2. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  3. java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值

    1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...

  4. android 利用反射机制获取drawable中所有的图片资源

    public List<Map<String,Object>> getGridData() { list=new ArrayList<Map<String,Obje ...

  5. java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    一个普通的实体Person: private int id; private String name; private Date createdTime;...//其它字段// get set方法 . ...

  6. 反射获取config实体类属性并赋值

    /// <summary> /// 将实体类存入config /// </summary> /// <param name="enity">&l ...

  7. java利用反射动态获取实体类的属性值

    直接贴代码吧,有需要的话,可以根据自己的需要修改部分代码: public BigDecimal getByAttributeName(ThmdGwqriR thmdGwqriR, String att ...

  8. Spring2.0-applicationContext.xml中使用el表达式给实体类属性赋值被当成字符串-遁地龙卷风

    (-1)写在前面 这两天读<javaweb开发王者归来>,学到Spring的PropertyPlaceholderConfigurer时出现一个问题,我已${jdbc.name}的形式赋值 ...

  9. Day14_82_反射机制输出整个类

    利用反射机制输出整个类 代码实例 import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Ref ...

随机推荐

  1. python 元组转字符串

    tup = ('e', 'x', 'e', 'r', 'c', 'i', 's', 'e', 's') str = ''.join(tup) print(str)

  2. MKAnnotationView和MKPinAnnotationView的区别

    如果想创建以静态图片作为大头针图片的话,可以通过创建MKAnnotationView是实例.如果想使用apple自带的大头针则创建MKPinAnnotationView

  3. Cassandra 和 Spark 数据处理一窥

    Apache Cassandra 数据库近来引起了很多的兴趣,这主要源于现代云端软件对于可用性及性能方面的要求. 那么,Apache Cassandra 是什么?它是一种为高可用性及线性可扩展性优化的 ...

  4. 常用 对象检测 api

    isPrototypeOf()    判断某个 proptotype 对象和某个实例之间的关系 alert(Cat.prototype.isPrototypeOf(cat1)); //true ale ...

  5. VS 2013 无法启动IIS Express Web 服务器

    之前程序好好的没什么问题,可是今天一大早来到公司后打开VS2013运行Web程序,然后就弹出提示信息:无法启动IIS Express Web 服务器,思来想去昨天都好好的,今天怎么会出现如此问题呢? ...

  6. LeetCode--175--组合两个表

    问题描述: 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | int | ...

  7. hdu3068 manacher模板题

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input输入有多组case,不超过120组,每组输入为 ...

  8. [LeetCode] 35. Search Insert Position ☆(丢失的数字)

    转载:https://leetcode.windliang.cc/leetCode-35-Search-Insert-Position.html    思路 Given a sorted array ...

  9. 超详细:Python(wordcloud+jieba)生成中文词云图

    # coding: utf-8 import jieba from scipy.misc import imread # 这是一个处理图像的函数 from wordcloud import WordC ...

  10. QT分析之WebKit

    该文章整理自 网易博客 http://blog.163.com/net_worm/blog/static/12770241920101831312381/ 转载请注明出处 WebKit是QT4新整合的 ...