1. ホーム
  2. android

[解決済み] Room "Not sure how to convert a Cursor to this method's return type": どのメソッドですか?

2023-05-15 13:25:33

質問

Error:Not sure how to convert a Cursor to this method's return type
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

使用方法 Room このエラーが出るのですが、どの方法が原因なのか調べたいのですが。

私は複数の DAO があり、合計で約 60 のメソッドがありますが、メソッドを追加した後にこのエラーが表示されました (完全に動作した別のメソッドからコピー & アンパストし、フィールドを set に変更しただけです)。

のクラス全体を投稿することができました。 DAO を投稿することもできますが どのメソッドが失敗したかを知る方法を求めているのです。 . で試してみましたが Run with --stacktrace , Run with --info--debug option といった具合ですが、いずれも貴重な情報を示していません。

私が追加したメソッドは @Query UPDATE と共に Int で提案されているように、戻り値の型を ドキュメントで提案されているように

UPDATEまたはDELETEクエリはvoidまたはintを返すことができます。もしintであれば の値は、このクエリによって影響を受ける行の数です。

EDIT: メソッドを削除して、DAOを動作状態に戻してみましたが、まだこのエラーが出ますので、追記したいと思います。

EDIT2:コメントでは読めないので、gradleのコンソール出力を追加しました。

error: Not sure how to convert a Cursor to this method's return type
error: Not sure how to convert a Cursor to this method's return type
2 errors

:app:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 22s

どのように解決するのですか?

私はこの問題に丸一日費やしました。解決策はとても簡単でした。以前はこのようなものを使っていました。

@Query("SELECT * FROM myTable")
fun getAll(): MutableLiveData<ArrayList<myData>>

ここで、ArrayListを リスト とし、MutableLiveDataを ライブデータ に変更したところ、正常に動作しています。

@Query("SELECT * FROM myTable")
fun getAll(): LiveData<List<myData>>

この問題に関する回答やコメントに基づいて、私は部屋がListとLiveDataのみをサポートしていると思います。

これが誰かの数時間の助けになることを願っています。