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

AndroidX Room неразрешенные супертипы RoomDatabase

Когда я пытаюсь создать свое приложение, я получаю эту ошибку компиляции:

Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
com.example.persistence.AppDatabase, unresolved supertypes: androidx.room.RoomDatabase

Настройка постоянства находится в отдельном модуле Android (постоянство).

build.gradle

// Kotlin StdLib
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

// Room
implementation      "androidx.room:room-runtime:$androidXRoom"
kapt "androidx.room:room-compiler:$androidXRoom"
implementation      "androidx.room:room-rxjava2:$androidXRoom"

доб.androidXRoom = "2.1.0-альфа02"

Я пытался изменить версию kotlin, версию комнаты, обратно на Android Arch Room, но это не работает. Я также попытался очистить проект и сделать недействительным кеш Android Studio. Но это не работает.

изменить: источник AppDatabase

package com.example.persistence.db

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.example.persistence.post.PostDbDao
import com.example.persistence.post.PostDbEntity

@Database(entities = [PostDbEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun favoritePostsDao(): PostDbDao

    companion object {

        var INSTANCE: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase? {
            if(INSTANCE == null) {
                synchronized(AppDatabase::class) {
                     INSTANCE = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "post_db").build()
                }
            }
            return INSTANCE
        }

        fun destroy() {
            INSTANCE = null
        }
    }

}

  • Можете ли вы добавить класс AppDatabase в вопрос 05.11.2018
  • добавлен класс AppDatabase 05.11.2018
  • Пожалуйста, добавьте это: annotationProcessor "androidx.room:room-compiler:$room_version" // use kapt for Kotlin и попробуйте. 05.11.2018
  • Но я добавил это в build.gradle. Я использую kapt, потому что пишу приложение на Котлине. 05.11.2018
  • вы уверены, что у вас есть правильный импорт? 05.11.2018
  • Я думаю, что импорт правильный. Не так ли? 05.11.2018
  • Можете ли вы добавить импорт AppDatabase в вопрос, добавьте полный файл 05.11.2018
  • Добавил полный файл 05.11.2018
  • @jarekbutek Вы нашли решение? 13.02.2019

Ответы:


1

Проблема, скорее всего, заключается в том, как вы определяете свои зависимости, RoomDatabase является частью общедоступного API, поскольку ваш AppDatabase расширяет его, и вы, вероятно, используете этот класс в своих нижестоящих зависимостях. Однако RoomDatabase объявлен как зависимость только для реализации. Это означает, что класс обычно недоступен для нижестоящих зависимостей во время компиляции.

Попробуйте изменить конфигурацию "androidx.room:room-runtime:$androidXRoom" на конфигурацию api, чтобы она стала частью общедоступного API. Вероятно, это должно устранить ошибку, с которой вы столкнулись.

05.11.2018

2

Измените зависимости градиента, такие как

   REMOVE -> implementation "androidx.room:room-runtime:$androidXRoom"
   REPLACE WITH -> api "androidx.room:room-runtime:$androidXRoom"

введите описание изображения здесь

20.03.2019

3

Другие ответы будут компилироваться, но не имеют смысла иметь отдельный модуль для ваших функций базы данных/постоянства.

Вы не должны выставлять объект Room Entity или базу данных Room за пределы модуля persistence. Вместо этого вы должны написать в своем модуле persistence функцию, которая сопоставляет вашу PostEntity @Entity с простым классом данных Post.

Подробнее об этом я писал здесь: https://jacquessmuts.github.io/post/modularization_room/

24.04.2019

4

В дополнение к ответам. Когда я выбрал Module->Android Library при создании нового модуля, процесс API был успешно завершен, и я предоставил решение.

18.12.2020
Новые материалы

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

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

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

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

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

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

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