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

#android #android-gradle-plugin #android-room #androidx

#Android #android-gradle-plugin #android-комната #androidx

Вопрос:

Я продолжаю получать эту ошибку. Я работаю над проектом и в середине разработки решил перейти на 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. По-видимому, тип данных Date не поддерживается room. Так что это вызывает проблему.

2. Разве стандартные @TypeConverter классы не должны обрабатывать преобразование Date в Long ?

3. вы нашли какое-либо решение? @dawn

4. Я понизил рейтинг зависимости, как указано в некоторых ответах, и удалил поле типа даты и вместо этого использовал строку. @RushDroid

Ответ №1:

Я обновил свой номер depency до 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 версии 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'
  

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

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

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

Комментарии:

1. Я использую 2.1.0-alpha05 и правильно настроил URL maven. Я попробую использовать 2.1.0-alpha04. Спасибо за ваш ответ.

2. По-прежнему не удалось заставить работать alpha05 ни alpha06. Понижение до alpha04 работает!

3. Это сработало! Я думаю, что нет необходимости добавлять это для alpha04. maven { url ‘ kotlin.bintray.com/kotlinx ‘ }

4. не имеет никакого значения даже после добавления maven { url ‘ kotlin.bintray.com/kotlinx ‘ }

Ответ №2:

Я решил эту проблему, понизив рейтинг до:

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

Ответ №3:

Решено!

 //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/" }
  

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

Ответ №4:

Как и большинство ошибок, которые имеют какое-то отношение к 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.

Комментарии:

1. Вы хотите сказать, что фактические ошибки в данный момент не отображаются? Каково значение Xmaxerrs по умолчанию?

2. По крайней мере, для меня это было проблемой, и где-то посередине была информация о том, что один столбец запроса не соответствует объекту. Я думаю, что значение по умолчанию равно 100 ошибкам.

3. Я сделал это, но все еще не смог увидеть никаких ошибок, которые я понимаю. @glm9637

4. попробуйте выполнить поиск в консоли с помощью этого регулярного выражения: ^((?!(class|Databinding|Note: failed|^)).)*$ оно должно отмечать те ошибки, которые не имеют ничего общего с Kotlin или любыми неинтересными ошибками привязки данных @dawn

Ответ №5:

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

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

Ответ №6:

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

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

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

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

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

Ответ №7:

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

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


Прежде чем пытаться устранить ошибку, попробуйте сначала обновить Android Studio. После обновления Gradle, всех зависимостей и НАЧИНАЯ с 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's return type.
  

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

Ответ №8:

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

Ответ №9:

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

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

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

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

Ответ №10:

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

Ответ №11:

У меня та же ошибка, и я использовал версию 2.1.x-alpha, и после обновления до 2.2.3 новая версия правильно сообщила об ошибке, и это было то, что у одного из моих объектов не было первичного ключа

Ответ №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;
}
  

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

Комментарии:

1. Добавление конструктора по умолчанию также может помочь. общедоступный Flock() {}

2. Конструктор по умолчанию не решает проблему. Томас.