我有一个电影表,其中有许多列和一个类,它以相同的顺序表示具有相同列/字段类型的表(一个int用于id,所有其他都是字符串)我有这个代码试图插入一个将对象movie
中的电影记录到数据库中。
我遇到一个问题,说方法put
无法接受该组或参数(String, capture#2-of ?)
有什么比解决我的问题更好或更差的方法?
你EDIT:
能解释一下我为什么错了吗?
ContentValues contentValues = new ContentValues();
Field[] fields = movie.getClass().getFields();
for(int i = 0; i < fields.length; i++)
{
contentValues.put(allColumns[i], fields[i].getType().cast(fields[i].get(movie)));
}
答案 0 :(得分:2)
fields[i].getType().cast(fields[i].get(movie))
返回Object类型,并且put(...)没有重载,它将Object作为其第二个参数。
使用内容值add(...)方法时,首先应将值转换为原始类型,如int,String,boolean,long或byte []
您可以将数据序列化为blob(作为字节数组)或其他表示形式,例如String。
编辑:请参阅注释,看起来Field.getType()返回一个通用类,您需要在调用cast()之前进行转换,即: -
Class<String> fieldType = (Class<String>) fields[i].getType();
但这不会帮助你进一步发展,因为你需要事先了解类型,你可以做的就是这样:
ContentValues contentValues = new ContentValues();
Field[] fields = movie.getClass().getFields();
for(int i = 0; i < fields.length; i++)
{
Class<?> fieldType = fields[i].getType();
if(String.class.isAssignableFrom(fieldType)) {
contentValues.put(allColumns[i], (String) fields[i].get(movie));
} else if(Integer.class.isAssignableFrom(fieldType)) {
contentValues.put(allColumns[i], (Integer) fields[i].get(movie));
}
...and so on for all types
}
答案 1 :(得分:0)
您可以使用ORMLite之类的东西来管理数据库查询。 以下是与Android
一起使用的documentation