在CursorAdapter中使用带ORMLite的Android游标
有没有办法,如何为我正在使用ORMLite Dao对象处理的查询获取游标?如果您指的是到达Dao方法创建等的在CursorAdapter中使用带ORMLite的Android游标,android,sqlite,cursor,ormlite,Android,Sqlite,Cursor,Ormlite,有没有办法,如何为我正在使用ORMLite Dao对象处理的查询获取游标?如果您指的是到达Dao方法创建等的getHelper()方法,那么您只需从OrmLiteBaseActivity继承即可调用它。它看起来像这样: public class YourClass extends OrmLiteBaseActivity<YourDBHelper> { @Override protected void onCreate(Bundle savedInstanceState) {
getHelper()
方法,那么您只需从OrmLiteBaseActivity
继承即可调用它。它看起来像这样:
public class YourClass extends OrmLiteBaseActivity<YourDBHelper> {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getHelper().getDao().queryForAll();
...
}
}
public类YourClass扩展了ormlitebase活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
...
getHelper().getDao().queryForAll();
...
}
}
如果你指的是处理数据库操作的光标:我认为你够不着它!但我不明白你为什么需要它。ORMLite几乎具有光标的所有功能。那么您需要它做什么呢?现在支持next()
,previous()
,moveRelative(offset)
。。。方法在网上。这应该允许您随意移动基础光标
对象
它还支持以下DAO游标方法:
- 将查询的数据库结果中的最新行返回到
。使用此选项,您可以更改光标位置(例如),然后获取当前对象select*
- 提供一个映射器,可用于映射Dao外部的对象
使用构建自己的查询时,使用
QueryBuilder
对象queryBuilder.prepare()
返回一个PreparedQuery
,DAO中的各种方法使用该查询。您可以调用dao.iterator(preparedQuery)
,它将返回一个CloseableIterator
,用于遍历结果。有一个迭代器.getRawResults()
来访问数据库结果
类。在Android下,可以将其转换为一个AndroidDatabaseResults
,其上有一个getCursor()
方法来返回Android光标
类似于以下代码:
// 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();
}
//生成查询
QueryBuilder qb=fooDao.QueryBuilder();
qb.where()。。。;
//完成后,准备查询并构建迭代器
CloseableIterator迭代器=dao.iterator(qb.prepare());
试一试{
//获取可以在Android下播放的原始结果
AndroidDatabaseResults结果=
(AndroidDatabaseResults)迭代器。getRawResults();
Cursor=results.getRawCursor();
...
}最后{
迭代器;
}
这有点复杂,但您肯定必须在vale后面查看,才能找到这个被数据库抽象类隐藏的对象。您是否尝试过Gray在post中的一些建议?他解释了如何选择一个列作为另一个名称,例如,选择id作为_id。如果您正在进行一项活动,并且不想与QueryBuilder为伍,请尝试以下操作,这同样有效
Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)
我知道这一点,但我需要让Cursor在CursorAdapter中使用它。我如何获得数据库连接?我已更改了此答案,以说明如何在不需要数据库连接的情况下完成此操作。@Gray非常感谢您对ORMLite的特别贡献, tnx@Gray在Android Grid/ListView中使用此策略并将光标交给我自己使用的SimpleCursorAdapter
或CursorAdapter
子类时,我得到了一个StaleDataException
——我注意到注释掉迭代器。closequity()
可以防止这种情况发生。除了保持迭代器在我使用完光标之前保持不变之外,您建议如何解决这个问题?@markyes,这里也有同样的问题。你最终做了什么?既然你可以在ormlite中命名你的列,我想为什么不直接将它们命名为_id,而不是选择为:)?当然可以,但在不能重命名它们的情况下,你只需使用sql语法“as”;)