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是模型类, MyImageDao是Dao类。 所以需要将AppDatabase.java类和MyImage修改为MyImageDao 。
更正的代码是 –
AppDatabase.java
@Database(entities = {MyImage.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract MyImageDao myImageDao(); }
你的语法看起来正确,我可以告诉。 你有没有尝试过以下的东西:
-
您的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。
- 你有重建/ 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 }