我正在修改我的 Android 应用程序以使用 ORMLite,它目前使用了一些 CursorAdapters,我非常想保留它们以尽量减少编码。
我不是 100% 确定,但似乎当 ORMLite 在数据库中创建一个 id 字段时,它总是使用 id
,而 CursorAdapter 需要 _id
。
可以使用如下查询来解决这个问题:
select id as _id ......
但是 Dao.queryRaw()
方法返回一个列表,而不是 Cursor,所以我这样做的方法是打开另一个 SQLiteOpenHelper 数据库连接并使用 rawQuery()
.
这行得通,但是有没有更好的方法呢?拥有两个单独的数据库连接似乎有些过分,而且可能会在以后存储麻烦。
最佳答案
您的评论表明您已经回答了您的问题。您当然可以使用 ORMLite 创建一个名为“_id”的列:
@DatabaseField(generatedId = true)
private int _id;
或
@DatabaseField(generatedId = true, columnName = "_id")
private int id;
如果您正在使用 Cursor
,那么您可能想看看 last()
和 moveAbsolute(...)
DatabaseResults
类上的方法。此外,AndroidDatabaseResults
(您可以将其转换为)还有一个 getRawCursor()
方法,该方法返回基础 Cursor
对象并具有额外的 getCount()
和 getPosition()
方法。
这里有一些关于 ORMLite 和 Cursor
的更多信息:
您可以使用如下方式访问Cursor
:
// build your query
QueryBuilder<Foo, String> qb = fooDao.queryBuilder();
qb.where()...;
// when you are done, prepare your query and build an iterator
CloseableIterator<Foo> iterator = dao.iterator(qb.prepare());
try {
// get the raw results which can be cast under Android
AndroidDatabaseResults results =
(AndroidDatabaseResults)iterator.getRawResults();
Cursor cursor = results.getRawCursor();
...
} finally {
iterator.closeQuietly();
}
关于android - Android 中带有 CursorAdapter 的 ORMLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416964/