这不适用于目标 "无支持字段或委托的成员属性 "和在Android上使用Room传递值错误?

问题描述 投票:0回答:1

我使用的是Room,我需要使用SELETC,INSERT,DELETE全部。我需要使用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?>?
}
@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?
)
@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;
    }
}

@Query("SELECT * FROM deliver") 我是这样实现的:

这不适用于目标 "无支持字段或委托的成员属性"。

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

android android-sqlite android-room
1个回答
1
投票

列表中的 @Query 注解要放在一个方法上。kotlin属性有点像 "一个字段+getter方法+setter方法",但它本身不是一个字段或方法。当你通过 @get:Query,你基本上是告诉编译器把这个注解放在属性的getter方法上,这样就能让整个事情顺利进行。


1
投票

我也有同样的问题,我通过检查我的导入,找出了一个解决方案。

我使用的是 retrofit 和 Room,我错误地导入了 retrofit。@Query 版本而不是房间。请检查您的导入。

© www.soinside.com 2019 - 2024. All rights reserved.