使用ORMLite的Android Cursor在CursorAdapter中使用

sea*_*kej 34 sqlite android cursor ormlite

有没有办法,如何获取查询的Cursor,我正在使用ORMLite Dao对象处理?

Gra*_*ray 65

ORMLite现在支持next(),previous(),moveRelative(offset),...的方法CloseableIterator.这应该允许您随意移动底层Cursor对象.

它还支持以下DAO Cursor方法:


使用ORMLite构建自己的查询时,可以使用该QueryBuilder对象. queryBuilder.prepare()返回PreparedQuery由DAO中的各种方法使用的.您可以调用dao.iterator(preparedQuery)哪个将返回CloseableIterator用于迭代结果的内容.有一个iterator.getRawResults()可以访问DatabaseResults课程.在Android下,可以将其强制转换为AndroidDatabaseResults具有getCursor()返回Android的方法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();
}
Run Code Online (Sandbox Code Playgroud)

这有点复杂,但你肯定要在谷后面找到这个被数据库抽象类隐藏的对象.

  • @Gray在使用这个策略并将光标移到我自己使用Android Grid/ListView的`SimpleCursorAdapter`或'CursorAdapter`子类时,我得到一个`StaleDataException` - 我注意到了`iterator.closeQuietly ()`防止这种情况发生.你有什么建议解决这个问题 - 除了保持迭代器,直到我完成光标? (5认同)
  • @Gray你特别关于ORMLite的贡献非常感谢,tnx (3认同)