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); } 

  • 在启动时使用参数化初始化的单例数据库对象?
  • 非法StateException错误
  • 房间 - 模式导出目录不提供给注释处理器,所以我们不能导出模式
  • Android Room Persistences库和Kotlin
  • 4 Solutions collect form web for “Android室错误:Dao类必须用@Dao标注”

    检查你的数据库类。 在定义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 } 
    Kotlin language will be the best programming language for Android.