我一直收到此错误。 我正在从事一个项目,在开发过程中,我决定迁移到AndroidX。
我收到以下错误:
Note: Failed to read get kotlin metadata for [Ljava.lang.Object;@79d6c4df
在实体文件中存在相同的错误,在相应的DAO中也存在4个相同的错误。
这是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
}
答案 0 :(得分:30)
我将Room 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 Release Notes
更新 我尝试了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/' }
没有错误,但已编译。我已经在真实设备中测试了我的应用数周,并且运行我的应用没有任何问题。我的会议室数据库运行正常。
答案 1 :(得分:9)
我通过降级为以下方法解决了这个问题:
implementation 'androidx.room:room-runtime:2.1.0-alpha04'
annotationProcessor 'androidx.room:room-compiler:2.1.0-alpha04'
答案 2 :(得分: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/" }
在这些更改之后,别忘了清理并重建项目
答案 3 :(得分:2)
就像大多数与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。
答案 4 :(得分:2)
使缓存无效并重新启动解决了我的问题。我的会议室版本为2.1.0-alpha06,并且还向项目存储库添加了以下依赖项:
maven { url 'https://kotlin.bintray.com/kotlinx/' }
答案 5 :(得分:2)
我遇到了同样的错误,我更新了房间资料库,但问题未解决, 然后我按照以下步骤进行操作,...解决了该问题之后,
步骤1:检查项目中的@DataBase类并检查是否插入了所有表(实体)
第2步:递增版本号
第3步:在.build()之前添加“ .fallbackToDestructiveMigration()”。
在这些更改之后,别忘了清理并重建项目
答案 6 :(得分:1)
在输入此答案时,我收到了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's return type.
一旦我修复了它们,构建就成功了,应用程序开始运行。我不需要添加已接受答案中提到的任何其他Maven存储库。
答案 7 :(得分:0)
我遇到了相同的问题,并通过覆盖对象的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变量的内置解决方案。
答案 8 :(得分:0)
添加import androidx.room.Dao;
,然后重新导入对我来说很成功。
答案 9 :(得分:0)
我通过将其添加到build.gradle(模块)中解决了
androidTestImplementation "androidx.arch.core:coretesting:$rootProject.archLifecycleVersion"
在我的build.gradle(Project)
中ext {
roomVersion = '2.1.0-alpha06'
archLifecycleVersion = '2.0.0'
}
答案 10 :(得分:0)
只需在依赖块中的gradle_module文件中更改room_version,然后更改所需的其他与房间相关的库。以https://developer.android.com/jetpack/androidx/releases/room#2.2.0-alpha01为例。尝试使用最新的稳定版本的房间。
答案 11 :(得分:0)
我有同样的错误,我使用的是2.1.x-alpha版本 并更新到2.2.3之后 新版本正确报告了错误,并且是我的一个实体没有主键