这不适用于目标“没有支持字段或委托的成员属性”以及在 Android 上使用 Room 传递值错误?

c-a*_*-an 0 android android-sqlite android-room

我正在使用房间。我需要使用 SELETC、INSERT、DELETE 全部。

这就是我实现的:

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE m_id IN (:m_id)")
    fun loadAllByIds(userSeqs: IntArray?): List<User?>?

    @Query("SELECT * FROM user")
    val all: List<User?>?
}
Run Code Online (Sandbox Code Playgroud)
@Entity(tableName = "user")
data class User (
    @PrimaryKey(autoGenerate = true) val seq: Long,

    // this name is used in dao as column name
    @ColumnInfo(name = "m_id") val mId: String?,
    @ColumnInfo(name = "k_id") var kId: String?,
    @ColumnInfo(name = "created_at") var createdAt: String?
)
Run Code Online (Sandbox Code Playgroud)
@Database(entities = {User.class}, version = 1,  exportSchema = false)
public abstract class MyDatabase extends RoomDatabase {
    public static final String DB_NAME = "MyDatabase.db";
    private static MyDatabase INSTANCE;
    public abstract UserDao userDao();

    public static MyDatabase getMyDatabase(Context context) {
        if (INSTANCE == null) {
            INSTANCE = Room.databaseBuilder(context, MyDatabase.class, DB_NAME).build();
        }
        return INSTANCE;
    }

    public static void destroyInstance() {
        INSTANCE = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

@Query("SELECT * FROM deliver")

这不适用于目标“没有支持字段或委托的成员属性”

@get:Query("SELECT * FROM deliver")让它消失。但是,我不知道为什么会这样。它能解决问题吗?它有什么作用?

Ale*_*nin 7

注释@Query将放置在方法上。kotlin 属性是一种“字段 + getter 方法 + setter 方法”,但它本身不是字段或方法。当您通过 指定注释目标时@get:Query,您基本上是在告诉编译器将此注释放在属性的 getter 方法上,这使得整个过程正常进行。


K P*_*K P 5

我遇到了同样的问题,我通过检查导入找到了解决方案。

我正在使用改造和房间,我错误地导入了改造@Query版本而不是房间。请同时检查您的导入。