gpt4 book ai didi

java - 房间@查询错误 : Cannot find method parameters

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:25 28 4
gpt4 key购买 nike

在我的项目中,我有一个库模块和一个使用它的应用程序模块。在这两个模块中,我对 Android 架构组件库具有相同的 gradle 依赖性:

// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:1.0.0"
implementation "android.arch.lifecycle:common-java8:1.0.0"

// Room
implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

在我的库模块中我定义了一个用户实体

@Entity(tableName = "users",
indices = {@Index(value = {"firstName", "lastName"})})
public class User {

public enum ROLE {
...
}

public enum FEEDBACK_LEVEL {
...
}

@PrimaryKey
public int id;

@TypeConverters(UserConverters.class)
ROLE role;

@TypeConverters(UserConverters.class)
FEEDBACK_LEVEL feedbackLevel;

public String firstName;

public String lastName;


public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public ROLE getRole() {
return role;
}

public void setRole(ROLE role) {
this.role = role;
}

public FEEDBACK_LEVEL getFeedbackLevel() {
return feedbackLevel;
}

public void setFeedbackLevel(FEEDBACK_LEVEL feedbackLevel) {
this.feedbackLevel = feedbackLevel;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
}

以及相关的DAO接口(interface)

@Dao
public interface UserDAO {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertUser(User ... u);

@Query("select * from users where users.id = :userId")
LiveData<User> getUser(int userId);
}

在我的应用程序模块中,我创建了我的数据库,我在其中使用了库项目中定义的实体

@Database(entities = {User.class}, version = 1)
public abstract class TDatabase extends RoomDatabase{
private static TDatabase sInstance;

public static TDatabase getInstance(final Context c) {
if(sInstance == null)
sInstance = Room.databaseBuilder(c, TDatabase.class, "t_db").build();
return sInstance;
}

public abstract UserDAO userDao();
}

问题是,当我尝试使用它的名称在 @Query 语句中引用方法参数时,出现以下错误

Error:Each bind variable in the query must have a matching method parameter. Cannot find method parameters for :userId.

如果我将 @Query

更改为
@Query("select * from users where users.id = :userId")
LiveData<User> getUser(int userId);

@Query("select * from users where users.id = :arg0")
LiveData<User> getUser(int userId);

一切正常。

我是不是犯了什么错误?为什么我会收到此错误?我在谷歌上搜索了一个解决方案,但在我使用 Java 时只找到了引用 Kotlin 的结果。

最佳答案

此问题报告于 https://issuetracker.google.com/issues/68118746并在 1.1.0-alpha3 版本中修复,但仅适用于 Kotlin 代码,因为参数名称始终存储在 Kotlin 类元数据中。

对于 Java,只有使用 :arg0 的解决方法,直到像 NamedArg 这样的注释将被添加到房间。

关于java - 房间@查询错误 : Cannot find method parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48100247/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com