Примечание. Не удалось прочитать метаданные get kotlin для [Ljava.lang.Object; @79d6c4df

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

Я получаю ошибку ниже:

Note: Failed to read get kotlin metadata for [Ljava.lang.Object;@79d6c4df

Существует такая же ошибка в объектном файле и 4 одинаковых ошибки в соответствующем DAO.

Вот код DAO:

@Dao
public interface FlockDao{
    @Query("SELECT * FROM flock_table")
    LiveData<List<Flock>> getAllFlocks();

    @Query("SELECT * FROM flock_table WHERE fid IN (:flockIds) LIMIT 1")
    Flock loadFlockById(int[] flockIds);

    @Insert
    void insert(Flock flock);

    @Update
    void update(Flock flock);

    @Delete
    void delete(Flock flock);
}

И моя сущность это:

@Entity
public class Flock{

    @PrimaryKey(autoGenerate = true)
    private int fid;

    @ColumnInfo(name = "user_id")
    private int uid;

    @ColumnInfo(name = "name")
    private String name;

    @ColumnInfo(name = "capacity")
    private int capacity;

    @ColumnInfo(name = "type")
    private String type;

    @ColumnInfo(name = "arrived")
    private Date arrived;

    .....rest of the code is omitted, there are constructor, setters and getters
}

Ответ 1

Я обновил свою зависимость от комнаты до 2.1.0-alpha05 и получил ту же проблему. Возврат к 2.1.0-alpha04 решил мой.

implementation 'androidx.room:room-runtime:2.1.0-alpha04'
annotationProcessor 'androidx.room:room-compiler:2.1.0-alpha04'

ОБНОВЛЕНИЕ Если вы действительно хотите использовать Room version 2.1.0-alpha05, добавьте следующую зависимость в ваш репозиторий проекта:

maven { url 'https://kotlin.bintray.com/kotlinx/' }

Ссылка: Примечания к выпуску AndroidX Room

ОБНОВЛЕНИЕ Я попробовал 2.1.0-alpha06.

implementation 'androidx.room:room-runtime:2.1.0-alpha06'
annotationProcessor 'androidx.room:room-compiler:2.1.0-alpha06'

Затем я добавляю зависимость в мой репозиторий проекта,

maven { url 'https://kotlin.bintray.com/kotlinx/' }

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

Ответ 2

Я решил эту проблему путем понижения до:

implementation 'androidx.room:room-runtime:2.1.0-alpha04'
annotationProcessor 'androidx.room:room-compiler:2.1.0-alpha04'

Ответ 3

У меня сейчас такие же проблемы с 2.1.0-alpha06. Ни один из ответов не решает проблему для меня. Я пытался понизить до alpha05 и alpha04.

Сущность:

package com.github.f4irline.taskscheduler.Goals;

import java.io.Serializable;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "goal_table")
public class Goal implements Serializable {
    @PrimaryKey(autoGenerate = true)
    public int goalId;

    @ColumnInfo(name = "goal")
    public String goal;

    @ColumnInfo(name = "goal_time")
    public float goalTime;

    @ColumnInfo(name = "goal_done")
    public float goalDone;

    public Goal() {}

    public Goal(String goal, float goalTime) {
        this.goal = goal;
        this.goalTime = goalTime;
        this.goalDone = 0;
    }

    public String getGoal() {
        return this.goal;
    }

    public float getGoalTime() {
        return this.goalTime;
    }
}

Dao:

package com.github.f4irline.taskscheduler.Goals;

import java.util.List;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;

@Dao
public interface GoalDao {

    @Query("SELECT * FROM goal_table")
    LiveData<List<Goal>> getAllGoals();

    @Insert
    void insert(Goal goal);

    @Query("DELETE FROM goal_table")
    void deleteAll();

    @Delete
    void delete(Goal goal);
}

Файл сборки верхнего уровня:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
        maven { url "https://kotlin.bintray.com/kotlinx/" }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://kotlin.bintray.com/kotlinx/" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.github.f4irline.taskscheduler"
        minSdkVersion 24
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
    implementation 'com.google.android.material:material:1.0.0-beta01'
    implementation 'com.google.android.material:material:1.0.0'

    def room_version = "2.1.0-alpha06"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
    testImplementation "androidx.room:room-testing:$room_version"

    def lifecycle_version = "2.0.0"
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
}

Ответ 4

Решено!

//Downgraded to alpha04.

implementation 'androidx.room:room-runtime:2.1.0-alpha04'
annotationProcessor 'androidx.room:room-compiler:2.1.0-alpha04'

// Other dependencies are..

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.1.0-alpha03'
implementation 'androidx.lifecycle:lifecycle-livedata:2.1.0-alpha03'
annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.1.0-alpha03'

// Removed this from project level gradle.
maven { url "https://kotlin.bintray.com/kotlinx/" }

Не забудьте очистить и восстановить проект после этих изменений

Ответ 5

Как и большинство ошибок, имеющих отношение к Room, наиболее вероятно, что ваша проблема - это всплывающее сообщение об ошибке. Для меня это помогло увеличить максимальное количество ошибок, добавив:

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xmaxerrs" << "1000"
    }
}

а затем выполнить задачу gradle:

 :app compileDebugJavaWithJavac

Тогда вы получите большой список ошибок, в вашем случае

Note: Failed to read get kotlin metadata for [Ljava.lang.Object;@79d6c4df

Но где-то в этом списке ваши настоящие ошибки, такие как неправильный запрос или что-то в этом роде. Исправьте эти ошибки и перестройте проект, который работает большую часть времени, но иногда вам придется отключить кэш и перезапустить Android Studio.

Ответ 6

Недействительные кэши и перезапуск решили мою проблему. Моя версия комнаты - 2.1.0-alpha06, и я также добавил следующую зависимость в мой репозиторий проекта:

 maven { url 'https://kotlin.bintray.com/kotlinx/' }

Ответ 7

Я получил ту же ошибку, я обновил библиотеки комнат, но проблема не была решена, затем я сделал следующие шаги,... после того, как эта проблема решена,

Шаг 1: Проверьте класс @DataBase в вашем проекте и убедитесь, что все таблицы (сущности) вставлены

Шаг 2: Увеличить номер версии

Шаг 3: Добавьте ".fallbackToDestructiveMigration()" перед .build().

Не забудьте очистить и восстановить проект после этих изменений

Ответ 8

Когда я печатал этот ответ, я был уведомлен о 2.1.0-alpha07. Это решило все ошибки. Переход на 2.1.0-alpha06 сломал сборку.

Оказывается, новая версия исправила ошибки для меня.


Прежде чем пытаться устранить ошибку, попробуйте сначала обновить Android Studio. После обновления Gradle, всех зависимостей и AS с 3.3.2 до 3.4 я обнаружил ошибки, с которыми раньше не сталкивался, например

error: Room cannot pick a constructor since multiple constructors are suitable. Try to annotate unwanted constructors with @Ignore.
error: Cannot find setter for field.
There are multiple good constructors and Room will pick the no-arg constructor. You can use the @Ignore annotation to eliminate unwanted constructors.
error: Not sure how to convert a Cursor to this method return type.

Как только я их исправил, сборка прошла успешно и приложение запустилось. Мне не нужно было добавлять дополнительные репозитории Maven, упомянутые в принятом ответе.

Ответ 9

Добавление import androidx.room.Dao; и затем его повторный импорт помог мне.

Ответ 10

Я решил, добавив это в build.gradle (модуль)

    androidTestImplementation "androidx.arch.core:coretesting:$rootProject.archLifecycleVersion"

В моем build.gradle (проект)

ext {
    roomVersion = '2.1.0-alpha06'
    archLifecycleVersion = '2.0.0'
}

Ответ 11

Просто измените room_version в файле gradle_module в блоке зависимостей и измените другие библиотеки, связанные с комнатой, которые вам нужны. Используйте https://developer.android.com/jetpack/androidx/releases/room#2.2.0-alpha01 в качестве примера. Попробуйте использовать последнюю стабильную версию комнаты.

Ответ 12

Я столкнулся с той же проблемой и исправил ее, переопределив методы equals & hashCode объекта.
Возможное решение для вашего случая:

@Override
public int hashCode() { return (27 * fid + (name!= null ? name.hashCode() : 0)); }

А также

@Override
public boolean equals(@Nullable Object obj) {
    if (this == obj) return true;
    if (!(obj instanceof Flock)) return false;
    Flock flock = (Flock) obj;
    if(fid != flock.fid) return false;
    return name != null ? name.equals(flock.name) : flock.name == null;
}

Вам также нужно будет найти решение для использования Date в Room, Room не имеет встроенного решения для переменной Date.