Android室错误:Dao类必须用@Dao标注

我正在使用我的Android应用程序的空间。 我现在试图设置我的数据库,但是有一个错误消息,说,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; } } 

DeviceDAO.java

 @Dao public interface DeviceDAO { @Insert(onConflict = OnConflictStrategy.REPLACE) void addDevicePreferences(DifficultType difficultType); @Query("SELECT * FROM device") List selectAllDevicePreferences(); @Update(onConflict = OnConflictStrategy.REPLACE) void updateDevicePreferences(Device device); } 

检查你的数据库类。 在定义DAO时,必须使用错误的types(Device代替DeviceDAO)。

不正确

public abstract Device deviceDao();

正确

public abstract DeviceDAO deviceDao();

希望这会工作。 谢谢

错误消息: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; } } 

MyImageDao.java

 @Dao public interface MyImageDao { @Query("SELECT * FROM myimage") List getAll(); @Insert void insertAll(MyImage... myImages); @Delete void delete(MyImage myImage); } 

AppDatabase.java

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

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

更正的代码是 –

AppDatabase.java

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

你的语法看起来正确,我可以告诉。 你有没有尝试过以下的东西:

  1. 您的import是否完整?

    导入android.arch.persistence.room.Dao; 导入android.arch.persistence.room.Delete; 导入android.arch.persistence.room.Insert; 导入android.arch.persistence.room.OnConflictStrategy; 导入android.arch.persistence.room.Query; 导入android.arch.persistence.room.Update;

Mabe删除他们所有的重新import。

  1. 你有重建/ Gradel生成项目?

我做了一个房间项目,我没有问题有相同的语法。

检查你的界面是否有其他方法。 在我的Kotlin实现中,我有:

 @Dao interface DeviceDao { @get:Query("SELECT * FROM extdevice") val all: List fun first() : ExtDevice? { val devices = all if (devices.isNotEmpty()) return devices[0] return null } } 

先删除()解决了我的问题:

 @Dao interface DeviceDao { @get:Query("SELECT * FROM extdevice") val all: List }