gpt4 book ai didi

android - Android 中带有 CursorAdapter 的 ORMLite

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:22 24 4
gpt4 key购买 nike

我正在修改我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com