JSONHelper.java
package com.jiangjiesheng.utils; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONStringer; import android.util.Log; /** * 类说明 :支持JSON 序列化和反序列化 * * @author 作者 江节胜 E-mail:jiangjsheng@qq.com * @version 创建时间:2016年7月23日 下午2:05:44 * */ public class JSONHelper { private static String TAG = "JSONHelper"; /** * 将对象转换成Json字符串 * * @param obj * @return json类型字符串 */ public static String toJSON(Object obj) { JSONStringer js = new JSONStringer(); serialize(js, obj); return js.toString(); } /** * 序列化为JSON * * @param js * json对象 * @param o * 待需序列化的对象 */ private static void serialize(JSONStringer js, Object o) { if (isNull(o)) { try { js.value(null); } catch (JSONException e) { e.printStackTrace(); } return; } Class<?> clazz = o.getClass(); if (isObject(clazz)) { // 对象 serializeObject(js, o); } else if (isArray(clazz)) { // 数组 serializeArray(js, o); } else if (isCollection(clazz)) { // 集合 Collection<?> collection = (Collection<?>) o; serializeCollect(js, collection); } else if (isMap(clazz)) { // 集合 HashMap<?, ?> collection = (HashMap<?, ?>) o; serializeMap(js, collection); } else { // 单个值 try { js.value(o); } catch (JSONException e) { e.printStackTrace(); } } } /** * 序列化数组 * * @param js * json对象 * @param array * 数组 */ private static void serializeArray(JSONStringer js, Object array) { try { js.array(); for (int i = 0; i < Array.getLength(array); ++i) { Object o = Array.get(array, i); serialize(js, o); } js.endArray(); } catch (Exception e) { e.printStackTrace(); } } /** * 序列化集合 * * @param js * json对象 * @param collection * 集合 */ private static void serializeCollect(JSONStringer js, Collection<?> collection) { try { js.array(); for (Object o : collection) { serialize(js, o); } js.endArray(); } catch (Exception e) { e.printStackTrace(); } } /** * 序列化Map * * @param js * json对象 * @param map * map对象 */ private static void serializeMap(JSONStringer js, Map<?, ?> map) { try { js.object(); @SuppressWarnings("unchecked") Map<String, Object> valueMap = (Map<String, Object>) map; Iterator<Map.Entry<String, Object>> it = valueMap.entrySet() .iterator(); while (it.hasNext()) { Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it .next(); js.key(entry.getKey()); serialize(js, entry.getValue()); } js.endObject(); } catch (Exception e) { e.printStackTrace(); } } /** * 序列化对象 * * @param js * json对象 * @param obj * 待序列化对象 */ private static void serializeObject(JSONStringer js, Object obj) { try { js.object(); Class<? extends Object> objClazz = obj.getClass(); Method[] methods = objClazz.getDeclaredMethods(); Field[] fields = objClazz.getDeclaredFields(); for (Field field : fields) { try { String fieldType = field.getType().getSimpleName(); String fieldGetName = parseMethodName(field.getName(), "get"); if (!haveMethod(methods, fieldGetName)) { continue; } Method fieldGetMet = objClazz.getMethod(fieldGetName, new Class[] {}); Object fieldVal = fieldGetMet.invoke(obj, new Object[] {}); String result = null; if ("Date".equals(fieldType)) { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.US); result = sdf.format((Date) fieldVal); } else { if (null != fieldVal) { result = String.valueOf(fieldVal); } } js.key(field.getName()); serialize(js, result); } catch (Exception e) { continue; } } js.endObject(); } catch (Exception e) { e.printStackTrace(); } } /** * 判断是否存在某属性的 get方法 * * @param methods * 引用方法的数组 * @param fieldMethod * 方法名称 * @return true或者false */ public static boolean haveMethod(Method[] methods, String fieldMethod) { for (Method met : methods) { if (fieldMethod.equals(met.getName())) { return true; } } return false; } /** * 拼接某属性的 get或者set方法 * * @param fieldName * 字段名称 * @param methodType * 方法类型 * @return 方法名称 */ public static String parseMethodName(String fieldName, String methodType) { if (null == fieldName || "".equals(fieldName)) { return null; } return methodType + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); } /** * 给字段赋值 * * @param obj * 实例对象 * @param valMap * 值集合 */ public static void setFieldValue(Object obj, Map<String, String> valMap) { Class<?> cls = obj.getClass(); // 取出bean里的所有方法 Method[] methods = cls.getDeclaredMethods(); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { try { String setMetodName = parseMethodName(field.getName(), "set"); if (!haveMethod(methods, setMetodName)) { continue; } Method fieldMethod = cls.getMethod(setMetodName, field.getType()); String value = valMap.get(field.getName()); if (null != value && !"".equals(value)) { String fieldType = field.getType().getSimpleName(); if ("String".equals(fieldType)) { fieldMethod.invoke(obj, value); } else if ("Date".equals(fieldType)) { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.US); Date temp = sdf.parse(value); fieldMethod.invoke(obj, temp); } else if ("Integer".equals(fieldType) || "int".equals(fieldType)) { Integer intval = Integer.parseInt(value); fieldMethod.invoke(obj, intval); } else if ("Long".equalsIgnoreCase(fieldType)) { Long temp = Long.parseLong(value); fieldMethod.invoke(obj, temp); } else if ("Double".equalsIgnoreCase(fieldType)) { Double temp = Double.parseDouble(value); fieldMethod.invoke(obj, temp); } else if ("Boolean".equalsIgnoreCase(fieldType)) { Boolean temp = Boolean.parseBoolean(value); fieldMethod.invoke(obj, temp); } else { System.out.println("setFieldValue not supper type:" + fieldType); } } } catch (Exception e) { continue; } } } /** * bean对象转Map * * @param obj * 实例对象 * @return map集合 */ public static Map<String, String> beanToMap(Object obj) { Class<?> cls = obj.getClass(); Map<String, String> valueMap = new HashMap<String, String>(); // 取出bean里的所有方法 Method[] methods = cls.getDeclaredMethods(); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { try { String fieldType = field.getType().getSimpleName(); String fieldGetName = parseMethodName(field.getName(), "get"); if (!haveMethod(methods, fieldGetName)) { continue; } Method fieldGetMet = cls .getMethod(fieldGetName, new Class[] {}); Object fieldVal = fieldGetMet.invoke(obj, new Object[] {}); String result = null; if ("Date".equals(fieldType)) { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.CHINA); result = sdf.format((Date) fieldVal); } else { if (null != fieldVal) { result = String.valueOf(fieldVal); } } valueMap.put(field.getName(), result); } catch (Exception e) { continue; } } return valueMap; } /** * 给对象的字段赋值 * * @param obj * 类实例 * @param fieldSetMethod * 字段方法 * @param fieldType * 字段类型 * @param value */ public static void setFiedlValue(Object obj, Method fieldSetMethod, String fieldType, Object value) { try { if (null != value && !"".equals(value)) { if ("String".equals(fieldType)) { fieldSetMethod.invoke(obj, value.toString()); } else if ("Date".equals(fieldType)) { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.CHINA); Date temp = sdf.parse(value.toString()); fieldSetMethod.invoke(obj, temp); } else if ("Integer".equals(fieldType) || "int".equals(fieldType)) { Integer intval = Integer.parseInt(value.toString()); fieldSetMethod.invoke(obj, intval); } else if ("Long".equalsIgnoreCase(fieldType)) { Long temp = Long.parseLong(value.toString()); fieldSetMethod.invoke(obj, temp); } else if ("Double".equalsIgnoreCase(fieldType)) { Double temp = Double.parseDouble(value.toString()); fieldSetMethod.invoke(obj, temp); } else if ("Boolean".equalsIgnoreCase(fieldType)) { Boolean temp = Boolean.parseBoolean(value.toString()); fieldSetMethod.invoke(obj, temp); } else { fieldSetMethod.invoke(obj, value); Log.e(TAG, TAG + ">>>>setFiedlValue -> not supper type" + fieldType); } } } catch (Exception e) { // Log.e(TAG, TAG + ">>>>>>>>>>set value error.",e); e.printStackTrace(); } } /** * 方法说明:字符串转json对象(反序列化) 新增 * @author 江节胜 ,E-mail:dev@jiangjiesheng.cn * @version 创建时间:2017-9-6 下午3:47:12 * * @param jsonStr * @return * @throws JSONException */ public static JSONObject parseJSONObject(String jsonStr) throws JSONException { JSONObject jo = null; jo = new JSONObject(jsonStr); if (isNull(jo)) { return null; } return jo; } /** * 反序列化简单对象 * * !!!注意使用parseJSONObject()处理字符串转json对象 * * @param jo * json对象 * @param clazz * 实体类类型 * @return 反序列化后的实例 * @throws JSONException */ public static <T> T parseObject(JSONObject jo, Class<T> clazz) throws JSONException { if (clazz == null || isNull(jo)) { return null; } T obj = newInstance(clazz); if (obj == null) { return null; } if (isMap(clazz)) { setField(obj, jo); } else { // 取出bean里的所有方法 Method[] methods = clazz.getDeclaredMethods(); Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { String setMetodName = parseMethodName(f.getName(), "set"); if (!haveMethod(methods, setMetodName)) { continue; } try { Method fieldMethod = clazz.getMethod(setMetodName, f.getType()); setField(obj, fieldMethod, f, jo); } catch (Exception e) { e.printStackTrace(); } } } return obj; } /** * 反序列化简单对象 * * !!!使用parseJSONObject()处理字符串转json对象 * * @param jsonStr * json字符串 * @param clazz * 实体类类型 * @return 反序列化后的实例 * @throws JSONException */ public static <T> T parseObject(String jsonStr, Class<T> clazz) throws JSONException { if (clazz == null || jsonStr == null || jsonStr.length() == 0) { return null; } JSONObject jo = null; jo = new JSONObject(jsonStr); if (isNull(jo)) { return null; } return parseObject(jo, clazz); } /** * 反序列化数组对象 * * @param ja * json数组 * @param clazz * 实体类类型 * @return 反序列化后的数组 */ public static <T> T[] parseArray(JSONArray ja, Class<T> clazz) { if (clazz == null || isNull(ja)) { return null; } int len = ja.length(); @SuppressWarnings("unchecked") T[] array = (T[]) Array.newInstance(clazz, len); for (int i = 0; i < len; ++i) { try { JSONObject jo = ja.getJSONObject(i); T o = parseObject(jo, clazz); array[i] = o; } catch (JSONException e) { e.printStackTrace(); } } return array; } /** * 反序列化数组对象 * * @param jsonStr * json字符串 * @param clazz * 实体类类型 * @return 序列化后的数组 */ public static <T> T[] parseArray(String jsonStr, Class<T> clazz) { if (clazz == null || jsonStr == null || jsonStr.length() == 0) { return null; } JSONArray jo = null; try { jo = new JSONArray(jsonStr); } catch (JSONException e) { e.printStackTrace(); } if (isNull(jo)) { return null; } return parseArray(jo, clazz); } /** * 反序列化泛型集合 * * @param ja * json数组 * @param collectionClazz * 集合类型 * @param genericType * 实体类类型 * @return * @throws JSONException */ @SuppressWarnings("unchecked") public static <T> Collection<T> parseCollection(JSONArray ja, Class<?> collectionClazz, Class<T> genericType) throws JSONException { if (collectionClazz == null || genericType == null || isNull(ja)) { return null; } Collection<T> collection = (Collection<T>) newInstance(collectionClazz); for (int i = 0; i < ja.length(); ++i) { try { JSONObject jo = ja.getJSONObject(i); T o = parseObject(jo, genericType); collection.add(o); } catch (JSONException e) { e.printStackTrace(); } } return collection; } /** * 反序列化泛型集合 * * @param jsonStr * json字符串 * @param collectionClazz * 集合类型 * @param genericType * 实体类类型 * @return 反序列化后的数组 * @throws JSONException */ public static <T> Collection<T> parseCollection(String jsonStr, Class<?> collectionClazz, Class<T> genericType) throws JSONException { if (collectionClazz == null || genericType == null || jsonStr == null || jsonStr.length() == 0) { return null; } JSONArray jo = null; try { // 如果为数组,则此处转化时,需要去掉前面的键,直接后面的[]中的值 int index = jsonStr.indexOf("["); String arrayString = null; // 获取数组的字符串 if (-1 != index) { arrayString = jsonStr.substring(index); } // 如果为数组,使用数组转化 if (null != arrayString) { jo = new JSONArray(arrayString); } else { jo = new JSONArray(jsonStr); } } catch (JSONException e) { e.printStackTrace(); } if (isNull(jo)) { return null; } return parseCollection(jo, collectionClazz, genericType); } /** * 根据类型创建对象 * * @param clazz * 待创建实例的类型 * @return 实例对象 * @throws JSONException */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static <T> T newInstance(Class<T> clazz) throws JSONException { if (clazz == null) return null; T obj = null; if (clazz.isInterface()) { if (clazz.equals(Map.class)) { obj = (T) new HashMap(); } else if (clazz.equals(List.class)) { obj = (T) new ArrayList(); } else if (clazz.equals(Set.class)) { obj = (T) new HashSet(); } else { throw new JSONException("unknown interface: " + clazz); } } else { try { obj = clazz.newInstance(); } catch (Exception e) { throw new JSONException("unknown class type: " + clazz); } } return obj; } /** * 设定Map的值 * * @param obj * 待赋值字段的对象 * @param jo * json实例 */ private static void setField(Object obj, JSONObject jo) { try { @SuppressWarnings("unchecked") Iterator<String> keyIter = jo.keys(); String key; Object value; @SuppressWarnings("unchecked") Map<String, Object> valueMap = (Map<String, Object>) obj; while (keyIter.hasNext()) { key = (String) keyIter.next(); value = jo.get(key); valueMap.put(key, value); } } catch (JSONException e) { e.printStackTrace(); } } /** * 设定字段的值 * * @param obj * 待赋值字段的对象 * @param fieldSetMethod * 字段方法名 * @param field * 字段 * @param jo * json实例 */ private static void setField(Object obj, Method fieldSetMethod, Field field, JSONObject jo) { String name = field.getName(); Class<?> clazz = field.getType(); try { if (isArray(clazz)) { // 数组 Class<?> c = clazz.getComponentType(); JSONArray ja = jo.optJSONArray(name); if (!isNull(ja)) { Object array = parseArray(ja, c); setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), array); } } else if (isCollection(clazz)) { // 泛型集合 // 获取定义的泛型类型 Class<?> c = null; Type gType = field.getGenericType(); if (gType instanceof ParameterizedType) { ParameterizedType ptype = (ParameterizedType) gType; Type[] targs = ptype.getActualTypeArguments(); if (targs != null && targs.length > 0) { Type t = targs[0]; c = (Class<?>) t; } } JSONArray ja = jo.optJSONArray(name); if (!isNull(ja)) { Object o = parseCollection(ja, clazz, c); setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o); } } else if (isSingle(clazz)) { // 值类型 Object o = jo.opt(name); if (o != null) { setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o); } } else if (isObject(clazz)) { // 对象 JSONObject j = jo.optJSONObject(name); if (!isNull(j)) { Object o = parseObject(j, clazz); setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o); } } else if (isList(clazz)) { // 列表 // JSONObject j = jo.optJSONObject(name); // if (!isNull(j)) { // Object o = parseObject(j, clazz); // f.set(obj, o); // } } else { throw new Exception("unknow type!"); } } catch (Exception e) { e.printStackTrace(); } } /** * 设定字段的值 * * @param obj * 待赋值字段的对象 * @param field * 字段 * @param jo * json实例 */ @SuppressWarnings("unused") private static void setField(Object obj, Field field, JSONObject jo) { String name = field.getName(); Class<?> clazz = field.getType(); try { if (isArray(clazz)) { // 数组 Class<?> c = clazz.getComponentType(); JSONArray ja = jo.optJSONArray(name); if (!isNull(ja)) { Object array = parseArray(ja, c); field.set(obj, array); } } else if (isCollection(clazz)) { // 泛型集合 // 获取定义的泛型类型 Class<?> c = null; Type gType = field.getGenericType(); if (gType instanceof ParameterizedType) { ParameterizedType ptype = (ParameterizedType) gType; Type[] targs = ptype.getActualTypeArguments(); if (targs != null && targs.length > 0) { Type t = targs[0]; c = (Class<?>) t; } } JSONArray ja = jo.optJSONArray(name); if (!isNull(ja)) { Object o = parseCollection(ja, clazz, c); field.set(obj, o); } } else if (isSingle(clazz)) { // 值类型 Object o = jo.opt(name); if (o != null) { field.set(obj, o); } } else if (isObject(clazz)) { // 对象 JSONObject j = jo.optJSONObject(name); if (!isNull(j)) { Object o = parseObject(j, clazz); field.set(obj, o); } } else if (isList(clazz)) { // 列表 JSONObject j = jo.optJSONObject(name); if (!isNull(j)) { Object o = parseObject(j, clazz); field.set(obj, o); } } else { throw new Exception("unknow type!"); } } catch (Exception e) { e.printStackTrace(); } } /** * 判断对象是否为空 * * @param obj * 实例 * @return */ private static boolean isNull(Object obj) { if (obj instanceof JSONObject) { return JSONObject.NULL.equals(obj); } return obj == null; } /** * 判断是否是值类型 * * @param clazz * @return */ private static boolean isSingle(Class<?> clazz) { return isBoolean(clazz) || isNumber(clazz) || isString(clazz); } /** * 是否布尔值 * * @param clazz * @return */ public static boolean isBoolean(Class<?> clazz) { return (clazz != null) && ((Boolean.TYPE.isAssignableFrom(clazz)) || (Boolean.class .isAssignableFrom(clazz))); } /** * 是否数值 * * @param clazz * @return */ public static boolean isNumber(Class<?> clazz) { return (clazz != null) && ((Byte.TYPE.isAssignableFrom(clazz)) || (Short.TYPE.isAssignableFrom(clazz)) || (Integer.TYPE.isAssignableFrom(clazz)) || (Long.TYPE.isAssignableFrom(clazz)) || (Float.TYPE.isAssignableFrom(clazz)) || (Double.TYPE.isAssignableFrom(clazz)) || (Number.class .isAssignableFrom(clazz))); } /** * 判断是否是字符串 * * @param clazz * @return */ public static boolean isString(Class<?> clazz) { return (clazz != null) && ((String.class.isAssignableFrom(clazz)) || (Character.TYPE.isAssignableFrom(clazz)) || (Character.class .isAssignableFrom(clazz))); } /** * 判断是否是对象 * * @param clazz * @return */ private static boolean isObject(Class<?> clazz) { return clazz != null && !isSingle(clazz) && !isArray(clazz) && !isCollection(clazz) && !isMap(clazz); } /** * 判断是否是数组 * * @param clazz * @return */ public static boolean isArray(Class<?> clazz) { return clazz != null && clazz.isArray(); } /** * 判断是否是集合 * * @param clazz * @return */ public static boolean isCollection(Class<?> clazz) { return clazz != null && Collection.class.isAssignableFrom(clazz); } /** * 判断是否是Map * * @param clazz * @return */ public static boolean isMap(Class<?> clazz) { return clazz != null && Map.class.isAssignableFrom(clazz); } /** * 判断是否是列表 * * @param clazz * @return */ public static boolean isList(Class<?> clazz) { return clazz != null && List.class.isAssignableFrom(clazz); } }
XMLHelper.java
package com.jiangjiesheng.xmlutil; import java.io.Closeable; import java.io.StringReader; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.content.ContentValues; import android.util.Xml; /** * 类说明 :解析XML实体(仅仅支持XML反序列化) * @author 作者 江节胜 E-mail:jiangjsheng@qq.com * @version 创建时间:2016年7月23日 下午2:07:30 * */ @SuppressWarnings("unchecked") public class XMLHelper { public static <T> T parseModel(final Object result, final Class<?> clazzModel) { final T model = (T) newInstance(clazzModel); parse(result + "", new OnXmlCallback() { @Override public boolean onTagStart(String tagName, XmlPullParser xmlParser) { xmlToModel(xmlParser, model, tagName); return false; } @Override public boolean onTagEnd(String tagName) { return false; } }); return model; } /** * 方法说明: 解析List,文件名要和数据中的父节点一样,并加上Model 单个model不需要在文件名上加Model,应该是分割数据的标记. * * @return */ public static <T> List<T> parseList(final Object result, final Class<?> clazzModel) { final List<T> lstModels = new ArrayList<T>(); final String modelName = clazzModel.getSimpleName() .replace("Model", "");// 注意这里 parse(result + "", new OnXmlCallback() { private T itemModel; @Override public boolean onTagStart(String tagName, XmlPullParser xmlParser) { if (tagName.equalsIgnoreCase(modelName)) { try { itemModel = (T) clazzModel.newInstance(); } catch (Exception e) { e.printStackTrace(); return true; } } else { xmlToModel(xmlParser, itemModel, tagName); } return false; } @Override public boolean onTagEnd(String tagName) { if (tagName.equalsIgnoreCase(modelName) && itemModel != null) { lstModels.add(itemModel); } return false; } }); return lstModels; } public static void parse(String xmlStr, OnXmlCallback onXmlCallback) { try { parseXml(xmlStr, onXmlCallback); } catch (Exception e) { e.printStackTrace(); } } public static String valueString(XmlPullParser xmlParser, String... defaultValue) { try { return xmlParser.nextText(); } catch (Exception e) { } return defaultValue.length > 0 ? defaultValue[0] : ""; } public static boolean valueBoolean(XmlPullParser xmlParser, boolean... defaultValue) { try { return Boolean.parseBoolean(valueString(xmlParser)); } catch (Exception e) { } return defaultValue.length > 0 ? defaultValue[0] : false; } public static int valueInt(XmlPullParser xmlParser, int... defaultValue) { try { return Integer.parseInt(valueString(xmlParser)); } catch (Exception e) { } return defaultValue.length > 0 ? defaultValue[0] : 0; } public static long valueLong(XmlPullParser xmlParser, int... defaultValue) { try { return Long.parseLong(valueString(xmlParser)); } catch (Exception e) { } return defaultValue.length > 0 ? defaultValue[0] : 0; } public static double valueDouble(XmlPullParser xmlParser, double... defaultValue) { try { return Double.parseDouble(valueString(xmlParser)); } catch (Exception e) { } return defaultValue.length > 0 ? defaultValue[0] : 0; } public static void xmlToModel(XmlPullParser xmlParser, Object model, String fieldName) { try { Object value = null; Field field = model.getClass().getDeclaredField(fieldName); field.setAccessible(true); if (field.getType() == String.class) { value = XMLHelper.valueString(xmlParser); } else if (field.getType() == Integer.TYPE) { value = XMLHelper.valueInt(xmlParser); } else if (field.getType() == Long.TYPE) { value = XMLHelper.valueLong(xmlParser); } else if (field.getType() == Double.TYPE) { value = XMLHelper.valueDouble(xmlParser); } else if (field.getType() == Boolean.TYPE) { value = XMLHelper.valueBoolean(xmlParser); } else { throw new IllegalArgumentException("ModelToContentValues, key:" + fieldName + "'s value type is: " + field.getType()); } field.set(model, value); } catch (Exception e) { // e.printStackTrace(); } } public static void closeStream(Closeable stream) { try { if (stream != null) { stream.close(); } } catch (Exception e) { } } public static Object newInstance(Class<?> clazz) { try { return clazz.newInstance(); } catch (Exception e) { } return null; } /** * convert model to ContentValues <BR/> * <H1>NOTE: model's fields must be same with columns.</H1> * * @param model * @param columns */ public static ContentValues modelToContentValues(Object model, String[] columns) { ContentValues values = new ContentValues(); Class<?> clazz = model.getClass(); for (int i = 0; i < columns.length; i++) { String key = columns[i]; try { Field field = clazz.getDeclaredField(key); field.setAccessible(true); Object value = field.get(model); if (field.getType() == String.class) { values.put(key, (String) value); } else if (field.getType() == Boolean.TYPE) { values.put(key, (Boolean) value); } else if (field.getType() == Integer.TYPE) { values.put(key, (Integer) value); } else if (field.getType() == Long.TYPE) { values.put(key, (Long) value); } else if (field.getType() == Double.TYPE) { values.put(key, (Double) value); } else if (field.getType() == Float.TYPE) { values.put(key, (Float) value); } else if (field.getType() == Short.TYPE) { values.put(key, (Short) value); } else if (field.getType() == Byte.TYPE) { values.put(key, (Byte) value); } else { throw new IllegalArgumentException( "ModelToContentValues, key:" + key + "'s value type is: " + field.getType()); } } catch (Exception e) { throw new IllegalStateException("ModelToContentValues.error " + e.getMessage()); } } return values; } public static void parseXml(String xmlStr, OnXmlCallback onXmlCallback) throws Exception { XmlPullParser xmlParser = Xml.newPullParser(); xmlParser.setInput(new StringReader(xmlStr)); int evtType = xmlParser.getEventType(); while (evtType != XmlPullParser.END_DOCUMENT) { String tagName = xmlParser.getName(); switch (evtType) { case XmlPullParser.START_TAG: if (onXmlCallback.onTagStart(tagName, xmlParser)) { return; } break; case XmlPullParser.END_TAG: if (onXmlCallback.onTagEnd(tagName)) { return; } break; default: break; } evtType = xmlParser.next(); } } public static interface OnXmlCallback { /** * start tag * * @param tagName * @param value * @return if true Then break; Or continue. */ public boolean onTagStart(String tagName, XmlPullParser xmlParser); /** * end tag * * @param tagName * @return if true Then break; Or continue. */ public boolean onTagEnd(String tagName); } }
有任何疑问或技术合作都可联系我
微信:yanfahezuo 【推荐】
QQ:596957738