web-dev-qa-db-ja.com

ルームdaoアクセスからカーソルオブジェクトのリストを取得する方法

ルームデータベースAPIを利用するためにコードを変更しようとしています。ドキュメントテーブルの場合、エンティティクラスDocumentを定義しました。getAll()をクエリすると、すべてのドキュメントが返されます。

今私はCursorを使用するアダプタの古い実装を持っています(そのCursorAdapter)。私のDocumentDaoクラスでは、カーソルオブジェクトのリストを取得する1つのメソッドを定義しました。私のDaoクラスは次のとおりです。

@Dao
public interface DocumentDao {

    @Query("SELECT * FROM documents")
    List<com.myapp.room.entity.Document> getAll();

    @Query("SELECT * FROM documents")
    List<Cursor> getCursorAll();
}

コンパイル時に次のエラーが発生します。

Error:(20, 18) error: Not sure how to convert a Cursor to this method's return type

Room の公式ガイドは次のように述べています:

アプリのロジックで戻り行に直接アクセスする必要がある場合は、次のコードスニペットに示すように、クエリからCursorオブジェクトを返すことができます。

@Dao
public interface MyDao {
    @Query("SELECT * FROM user WHERE age > :minAge LIMIT 5")
    public Cursor loadRawUsersOlderThan(int minAge);
}

私の質問は、この目的のためにコンバータを作成する必要があるかどうかです。

14
pcj

CursorではなくList<Cursor>が返されます。変化する:

@Query("SELECT * FROM documents")
List<Cursor> getCursorAll();

for

@Query("SELECT * FROM documents")
Cursor getCursorAll();
11
Pelocho