反射获取属性数组为空,一个大大的坑。。。
在写数据库的一个框架时,通过反射总是获取不到属性的数组,数组总是空的。代码如下:
@DbTable("tb_user")
public class User {
@DbField("name")
private String name;
@DbField("password")
private String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
}
private void initCacheMap() {
String sql = "select * from " + this.tableName + " limit 1, 0";
Cursor cursor = null;
try {
cursor = database.rawQuery(sql, null);
//表的列名数组
String[] columnNames = cursor.getColumnNames();
//field数组
Field[] columnFields=entityClass.getFields();
for (Field field : columnFields) {
field.setAccessible(true);
}
/**
* 开始找对应关系
*/
for (String columnName : columnNames) {
/**
* 如果找到对应的就赋值
*/
Field columnField = null;
for (Field field : columnFields) {
String fieldName;
if (field.getAnnotation(DbField.class) != null) {
fieldName = field.getAnnotation(DbField.class).value();
} else {
fieldName = field.getName();
}
/**
* 如果表的列名等于成员变量的注解名字
*/
if (columnName.equals(fieldName)) {
columnField = field;
break;
}
}
//找到了对应关系
if (columnField != null) {
cacheMap.put(columnName, columnField);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null){
cursor.close();
}
}
}
大家看出有什么不对的地方吗?
哈哈,不能private,要public修饰,正确代码:
@DbTable("tb_user")
public class User {
@DbField("name")
public String name;
@DbField("password")
public String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
}
找了好久。。。
PS:希望可以帮助大家。。。