Android Room错误:Dao类必须使用@Dao注释

Pri*_*ali 6 java database android android-room

我正在使用Room for my android app.我现在正在尝试设置我的数据库,但是有一条错误消息,表示Dao类必须用@Dao注释.但正如你在编码片段中看到的那样,Dao类用@Dao注释.有谁知道问题或我的错误可能在哪里?两个文件都不在同一个文件夹中(DAO在服务文件夹中,而另一个类在模型文件夹中)

Device.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

DeviceDAO.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);
}
Run Code Online (Sandbox Code Playgroud)

小智 19

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

不正确

public abstract Device deviceDao();

正确

public abstract DeviceDAO deviceDao();

希望这会奏效.谢谢


Mr.*_*lah 7

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

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

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

错误代码:

MyImage.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

MyImageDao.java

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

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

    @Delete
    void delete(MyImage myImage);
}
Run Code Online (Sandbox Code Playgroud)

AppDatabase.java

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

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

更正的代码是 -

AppDatabase.java

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