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();
希望这会奏效.谢谢
错误消息: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,这意味着它假设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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6384 次 |
| 最近记录: |