Nano Hash - криптовалюты, майнинг, программирование

Paging3: не уверен, как преобразовать Cursor в тип возвращаемого значения этого метода при использовании PagingSource в качестве типа возвращаемого значения в Room DAO

Я пытался имитировать кодовую лабораторию 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'

  • У меня такая же неудача. Какие у вас зависимости? 13.08.2020
  • @RezaBigdeli просто добавил зависимости в основной пост. 13.08.2020

Ответы:


1

Оказывается, вам нужно увеличить версию Room до 2.3.0-alpha02 или выше:

implementation "androidx.room:room-runtime:2.3.0-alpha02"
implementation "androidx.room:room-ktx:2.3.0-alpha02"
kapt "androidx.room:room-compiler:2.3.0-alpha02"
13.08.2020
  • Я попробую это 13.08.2020
  • Это сработало. Спасибо. Я должен был быть более внимательным к тому факту, что библиотека все еще находится в альфа-версии, отсюда и ошибки. 13.08.2020
  • Я использовал альфа-версию для зависимости rxjava и стабильную версию для других зависимостей, вызывая аналогичную ошибку, описанную выше. 30.01.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..