安卓房间错误:道类必须用@Dao

2022-09-04 23:54:04

我正在将 Room 用于我的 Android 应用。我现在正试图设置我的数据库,但有一条错误消息,说,Dao类必须用@Dao进行注释。但是,正如您在编码片段中看到的那样,Dao 类是用 @Dao 注释的。有谁知道问题或我的错误可能在哪里?两个文件不在同一文件夹中(DAO 位于服务文件夹中,而另一个类位于模型文件夹中)

设备.java

@Entity(tableName = "device")
public class Device {

    @PrimaryKey(autoGenerate = true)
    public int device_id;

    @ColumnInfo(name = "identifier")
    public String identifier;

    @ColumnInfo(name = "language")
    public int language;

    @ColumnInfo(name = "searchFilter")
    public int searchFilter;

    public Device(String identifier, int language, int searchFilter){
        this.identifier = identifier;
        this.language = language;
        this.searchFilter = searchFilter;
    }
}

设备道.java

@Dao
public interface DeviceDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void addDevicePreferences(DifficultType difficultType);

    @Query("SELECT * FROM device")
    List<Device> selectAllDevicePreferences();

    @Update(onConflict = OnConflictStrategy.REPLACE)
    void updateDevicePreferences(Device device);
}

答案 1

检查数据库类。定义 DAO 时,必须使用错误的类型(设备而不是设备 DAO)。

不對

public abstract Device deviceDao();

正确

public abstract DeviceDAO deviceDao();

希望这将起作用。谢谢


答案 2

错误消息:必须使用@Dao对 Dao 类进行注释

要解决错误,请正确阅读。

如果此错误消息显示在 Model 类上,则需要修改 AppDatabase 类。我给你的代码是什么给错误,然后错误纠正代码。

错误代码:

我的图像.java

@Entity
public class MyImage {
    @PrimaryKey(autoGenerate = true)
    private int uid;
    @ColumnInfo(name = "title")
    private String title;
    @ColumnInfo(name = "photo")
    private String photo;

    public MyImage(String title, String photo) {
        this.title = title;
        this.photo = photo;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getPhoto() {
        return photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }
}

我的影像.java

@Dao
public interface MyImageDao {
    @Query("SELECT * FROM myimage")
    List<MyImage> getAll();

    @Insert
    void insertAll(MyImage... myImages);

    @Delete
    void delete(MyImage myImage);
}

应用数据库.java

@Database(entities = {MyImage.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract MyImage myImageDao();
}

这里只有AppDatabase.java文件有错误,你可以看到myImageDao有返回类型MyImage,这意味着它假设MyImage一个Dao类,但MyImage模型类,MyImageDaoDao类。因此,它需要修改AppDatabase.java类和MyImageMyImageDao

更正后的代码为-

应用数据库.java

@Database(entities = {MyImage.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract MyImageDao myImageDao();
}

推荐