Я пытался имитировать кодовую лабораторию Google для новой библиотеки Paging 3, и я столкнулся со следующей ошибкой, когда попытался вернуть метод Room DAO PagingSource
:
D:\Programming\Android\something\app\build\tmp\kapt3\stubs\debug\com\someapp\something\data\db\UsersDao.java:38: error: Not sure how to convert a Cursor to this method's return type (androidx.paging.PagingSource<java.lang.Integer,com.someapp.something.data.db.GithubUser>).
public abstract androidx.paging.PagingSource<java.lang.Integer, com.someapp.something.data.db.GithubUser> getUserByUserName(@org.jetbrains.annotations.NotNull()
^D:\Programming\Android\something\app\build\tmp\kapt3\stubs\debug\com\someapp\something\data\db\UsersDao.java:43: error: Not sure how to convert a Cursor to this method's return type (androidx.paging.PagingSource<java.lang.Integer,com.someapp.something.data.db.GithubUser>).
public abstract androidx.paging.PagingSource<java.lang.Integer, com.someapp.something.data.db.GithubUser> getUserByNote(@org.jetbrains.annotations.NotNull()
Вот мой UsersDao.kt
:
@Dao
interface UsersDao {
@Insert
fun insert(user: GithubUser): Completable
@Insert
fun insert(userList: List<GithubUser>): Completable
@Query("DELETE FROM userDb")
fun clearDb(): Completable
@Query("SELECT * FROM userDb")
fun getAllUsers(): Single<List<GithubUser>>
@Query("SELECT EXISTS(SELECT 1 FROM userDb WHERE username LIKE :userName)")
fun checkIfUserExists(userName: String): Boolean
@Query("SELECT note FROM userDb WHERE username LIKE :userName")
fun getNoteByUserName(userName: String): Single<String>
@Query("SELECT * FROM userDb WHERE username LIKE :userName")
fun getUserByUserName(userName: String): PagingSource<Int, GithubUser>
@Query("SELECT * FROM userDb WHERE note LIKE :note")
fun getUserByNote(note: String): PagingSource<Int, GithubUser>
}
Мой GithubUser.kt
выглядит так:
@Entity(tableName = "userDb", indices = arrayOf(Index(value = ["username"], unique = true)))
class GithubUser (
var username: String,
var note: String,
var url: String,
var avatarUrl: String
) {
@PrimaryKey(autoGenerate = true)
var uid = 0
}
В code для Paging Codelab, метод DAO просто возвращает PagingSource
без дополнительных аннотаций / магических опций в Gradle или чем-то еще. Я также просмотрел другие примеры из Github, например this и this, которые используют библиотеку Paging 3, они просто возвращают PagingSource
без каких-либо проблем. Кто-нибудь может сказать мне, если я что-то пропустил?
ПРИМЕЧАНИЕ. Перед самой ошибкой я всегда получаю предупреждение о ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1
, но само это предупреждение не вызывало никаких проблем в прошлом, но я отмечаю его здесь на всякий случай.
РЕДАКТИРОВАТЬ: я использую следующие версии библиотеки Room / Paging:
implementation "androidx.room:room-runtime:2.2.5"
kapt "androidx.room:room-compiler:2.2.5"
implementation 'androidx.room:room-rxjava2:2.2.5'
implementation "androidx.paging:paging-runtime:3.0.0-alpha03"
implementation 'androidx.paging:paging-rxjava2:3.0.0-alpha03'
rxjava
и стабильную версию для других зависимостей, вызывая аналогичную ошибку, описанную выше. 30.01.2021