package com.base.bean;
import java.io.Serializable;
import java.lang.reflect.Field;
import org.json.JSONObject;
import android.content.ContentValues;
import android.database.Cursor;
import com.base.db.TableColumn;
import com.google.gson.Gson;
public abstract class BaseBean<T> implements Serializable {
private static final long serialVersionUID = -804757173578073135L;
@TableColumn(type = TableColumn.Types.INTEGER, isPrimary = true)
public final static String _ID = "_id";
/**
* 将json对象转化为Bean实例
*
* @param jsonObj
* @return
*/
public abstract T parseJSON(JSONObject jsonObj);
/**
* 将Bean实例转化为json对象
*
* @return
*/
public abstract JSONObject toJSON();
/**
* 将数据库的cursor转化为Bean实例(如果对象涉及在数据库存取,需实现此方法)
*
* @param cursor
* @return
*/
public abstract T cursorToBean(Cursor cursor);
/**
* 将Bean实例转化为一个ContentValues实例,供存入数据库使用(如果对象涉及在数据库存取,需实现此方法)
*
* @return
*/
public abstract ContentValues beanToValues();
@SuppressWarnings("unchecked")
public T parseJSON(Gson gson, String json) {
return (T) gson.fromJson(json, this.getClass());
}
public ContentValues toValues() {
ContentValues values = new ContentValues();
try {
Class<?> c = getClass();
Field[] fields = c.getFields();
for (Field f : fields) {
f.setAccessible(true);
final TableColumn tableColumnAnnotation = f.getAnnotation(TableColumn.class);
if (tableColumnAnnotation != null) {
if (tableColumnAnnotation.type() == TableColumn.Types.INTEGER) {
values.put(f.getName(), f.getInt(this));
} else if (tableColumnAnnotation.type() == TableColumn.Types.BLOB) {
values.put(f.getName(), (byte[]) f.get(this));
} else if (tableColumnAnnotation.type() == TableColumn.Types.TEXT) {
values.put(f.getName(), f.get(this).toString());
} else {
values.put(f.getName(), f.get(this).toString());
}
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return values;
}
}