ルームデータベース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);
}
私の質問は、この目的のためにコンバータを作成する必要があるかどうかです。
Cursor
ではなくList<Cursor>
が返されます。変化する:
@Query("SELECT * FROM documents")
List<Cursor> getCursorAll();
for
@Query("SELECT * FROM documents")
Cursor getCursorAll();