1

我有一个包含许多列的电影表和一个表示具有相同列/字段类型的表的类以相同的顺序(一个 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)));
}
4

2 回答 2

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
}
于 2013-02-13T12:23:27.533 回答
0

您可以使用ORMLite 之类的东西来管理您的数据库查询。这是一些与Android一起使用的文档

于 2013-02-13T11:07:55.553 回答