Примечание. Не удалось прочитать метаданные 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.