android - Android 中带有 CursorAdapter 的 ORMLite

标签 android ormlite android-cursoradapter

我正在修改我的 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 的更多信息:

Android Cursor with ORMLite to use in CursorAdapter

您可以使用如下方式访问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/

相关文章:

android - 加载图像时 ListView 非常慢(使用 Universal Image Loader)

android - 使用 XmlPullParser 修改 xml 属性值

android - 任何用于 SQL 的 kotlin ORM?

android - 使用游标适配器和加载器时动态编辑 ListView 项

java - 从主题添加按钮到预先存在的工具栏

android - android 上的垂直对齐 ionic 标题

android - 如何有效地使用 ormlite 在 android sqlite 数据库中插入批量数据

java - ORMLite 与纯 SQLite 选择性能

android - 游标 getPosition 始终为 0

java - Android ListView 项目上的滑动手势