Android Room: просмотры через тег @DatabaseView не создаются

Вот мой код. Я сделал все, как объяснил. Созданные представления помечены с помощью @DATABASEVIEW(value=?, viewName=?) Помечены представления в классе базы данных Room. Но когда я запрашиваю select против VIEWS, выбрасывая исключение в процессе сборки: Существует проблема с запросом: [SQLITE_ERROR] SQL ошибка или отсутствует база данных (такой таблицы нет: USER_RATE_INFO_VIEW. Я изучил автоматически созданные классы реализации базы данных и не нашел сценариев создания представлений. введите здесь описание изображения

@Database(entities = {BankEntity.class, BankRateEntity.class, CommentEntity.class, ExchangeOfficeEntity.class,
        FBankEntity.class, FBankRateEntity.class, FRateEntity.class, RateByUserEntity.class,
        RateInfoEntity.class, UserEntity.class, UserMessageEntity.class, UserRateEntity.class},
        views = {BankRateView.class, ChatView.class, FBankRateView.class, RateInfoView.class, UserRateVew.class},
        version = 9)
public abstract class RoomDB extends RoomDatabase {
    private static RoomDB INSTANCE;

    public abstract RoomDao roomDao();

    public static RoomDB getDatabase(Context context) {
        if (INSTANCE == null) {
            INSTANCE =
                    Room.databaseBuilder(context.getApplicationContext(), RoomDB.class, "database.db")
                            // allow queries on the main thread.
                            // Don't do this on a real app! See PersistenceBasicSample for an example.
                            .allowMainThreadQueries()
                            .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7, MIGRATION_7_8, MIGRATION_8_9)
                            .build();
        }
        return INSTANCE;
    }
}

@Getter
@Setter
@DatabaseView(value = TUserRate.VIEW_SQL_CMD, viewName = TUserRate.VIEW_NAME)
public class UserRateVew extends UserRateEntity{

    @ColumnInfo(name = TUserRate.COLUMN_USER_RATING)
    private float userRating;

}

person Rustam Samandarov    schedule 22.12.2018    source источник
comment
Кто-нибудь использует компонент комнаты?   -  person Rustam Samandarov    schedule 22.12.2018
comment
Та же проблема здесь, вы нашли что-нибудь работающее по этому вопросу?   -  person Stéphane Péchard    schedule 08.03.2019
comment
@StéphanePéchard Я пробовал переименовывать классы и очищать сборку. После этого я не видел такой ошибки   -  person Rustam Samandarov    schedule 25.07.2019


Ответы (1)


У меня такая же ошибка, и я просто решаю ее. (Я использую kotlin, поэтому вам нужно что-то изменить в java)

1. проверьте свою зависимость build.gradle (их две, одна отображается в «Android», которая находится в папке приложения, другая в «Project», которая является корневой папкой проекта)

корень проекта / build.gradle я добавляю следующим образом

ext.ktlintVersion = '0.30.0' in buildscript{}
plugins {
    id "com.diffplug.gradle.spotless" version "3.13.0"
}
spotless {
kotlin {
    target "**/*.kt"
    ktlint(ktlintVersion)
    }
}

приложение / build.gradle

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
} in android{}

following dependency seems must at top
kapt "androidx.room:room-compiler:2.1.0-beta01"
implementation 'androidx.core:core-ktx:1.0.2'

this one just below previous mention denpendency
implementation 'androidx.room:room-runtime:2.1.0-beta01'
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0-alpha01"

following at bottom but before androidTestImplementation; kotlin_version should be 1.3.31
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"

<сильный>2. проверьте реализацию DAO, использующую @databaseview, особенно тип возвращаемого значения, который должен соответствовать столбцу результатов представления запроса

Когда я меняю свой build.gradle, ошибка становится фактической ошибкой, из-за которой не создается представление базы данных.

<сильный>3. аннулировать кеши/перезапустить студию Android

Я потратил пару часов на отладку и устранение этой ошибки, надеюсь, это поможет вам.

(Я не из англоязычной страны, так что наслаждайтесь моей ошибкой в ​​английской грамматике. хахаха)

person simon dev    schedule 22.05.2019