Android Cursor с ORMLite для использования в CursorAdapter

Есть ли способ, как получить курсор для запроса, который я обрабатываю с помощью объекта ORMLite Dao?

Solutions Collecting From Web of "Android Cursor с ORMLite для использования в CursorAdapter"

ORMLite теперь поддерживает методы next() , previous() , moveRelative(offset) , … в классе CloseableIterator . Это должно позволить вам перемещать основной объект Cursor по желанию.

Он также поддерживает следующие методы DAO Cursor:

  • dao.mapSelectStarRow(databaseResults) Возвращает последнюю строку из результатов базы данных из запроса, чтобы select * . С помощью этого вы можете изменить местоположение курсора (например), а затем получить текущий объект.
  • dao.getSelectStarRowMapper() Предоставляет карту, который можно использовать для сопоставления объекта за пределами Дао.

Когда вы создаете свой собственный запрос с помощью ORMLite , вы используете объект QueryBuilder . queryBuilder.prepare() возвращает PreparedQuery который используется различными методами в DAO. Вы можете вызвать dao.iterator(preparedQuery) который вернет CloseableIterator который используется для 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(); } 

Это немного сложно, но вам определенно нужно заглянуть за долину, чтобы добраться до этого объекта, который скрыт в классах абстракции базы данных.

Вы попробовали некоторые из рекомендаций Грея с этого поста? Он объясняет, как вы можете выбрать столбец как другое имя, например, выбрать id как _id.

Если вы находитесь в Управлении и не хотите обходиться с QueryBuilder, дайте следующие рекомендации, которые так же эффективны.

 Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder) 

Если вы имеете в виду метод getHelper() для создания методов dao и т. Д., Вам нужно только наследовать от OrmLiteBaseActivity<YourDBHelper> и вы можете его назвать. Он будет выглядеть так:

 public class YourClass extends OrmLiteBaseActivity<YourDBHelper> { @Override protected void onCreate(Bundle savedInstanceState) { ... getHelper().getDao().queryForAll(); ... } } 

Если вы имеете в виду курсор для обработки базы данных: я не думаю, что вы можете связаться с ним! Но я не понимаю, зачем вам это нужно. ORMLite имеет почти все функции курсора. Так зачем вам это нужно?