无法从 DAO 解析方法
Cannot resolve Method from DAO
我正在使用 Room Library 尝试一个简单的数据库示例。
我有一个闹钟 class
@Entity
public class Alarm{
@PrimaryKey
public int id;
public long alarmtime;
public Alarm(int id, long alarmtime){
this.id = id;
this. alarmtime = alarmtime;
}
}
一个AlarmDAO接口,
@Dao
public interface AlarmDAO {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void addAlarm(Alarm alarm);
@Query("select * from Alarm")
public List<Alarm> getAllAlarm();
@Query("select * from Alarm where id = :id")
public List<Alarm> getAlarm(long userId);
@Update(onConflict = OnConflictStrategy.REPLACE)
void updateAlarm(Alarm alarm);
@Query("delete from Alarm")
void removeAllAlarm();
}
还有一个报警数据库class,
@Database(entities = {Alarm.class}, version = 16, exportSchema = false)
public abstract class AlarmDatabase extends RoomDatabase {
private static AlarmDatabase INSTANCE;
public abstract Alarm AlarmDAO();
public static AlarmDatabase getDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context, AlarmDatabase.class, "userdatabase")
.allowMainThreadQueries()//remove this line in production
.fallbackToDestructiveMigration()
.build();
}
return INSTANCE;
}
}
在 MainActivity 中,当我尝试从 AlarmDAO 访问一个方法时,它说它无法解析该方法,
database = AlarmDatabase.getDatabase(this);
database.AlarmDAO().removeAllAlarm();
您在 AlarmDatabase
中没有名为 AlarmDao
的字段。您有一个名为 AlarmDAO()
的方法。因此,调用 AlarmDAO()
方法:
database.AlarmDAO().removeAllAlarm();
分析了我所有的代码后,我意识到我使用了将 AlarmDAO
分配给 Alarm
(我不知道为什么可以接受,因为它们属于不同类型)所以改变这个在 AlarmDatabase.java 中使其开始工作。
@Database(entities = {Alarm.class}, version = 16, exportSchema = false)
public abstract class AlarmDatabase extends RoomDatabase {
private static AlarmDatabase INSTANCE;
public abstract AlarmDAO AlarmDAO();// WAS originally Alarm AlarmDAO();
public static AlarmDatabase getDatabase(Context context) {
...
我正在使用 Room Library 尝试一个简单的数据库示例。 我有一个闹钟 class
@Entity
public class Alarm{
@PrimaryKey
public int id;
public long alarmtime;
public Alarm(int id, long alarmtime){
this.id = id;
this. alarmtime = alarmtime;
}
}
一个AlarmDAO接口,
@Dao
public interface AlarmDAO {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void addAlarm(Alarm alarm);
@Query("select * from Alarm")
public List<Alarm> getAllAlarm();
@Query("select * from Alarm where id = :id")
public List<Alarm> getAlarm(long userId);
@Update(onConflict = OnConflictStrategy.REPLACE)
void updateAlarm(Alarm alarm);
@Query("delete from Alarm")
void removeAllAlarm();
}
还有一个报警数据库class,
@Database(entities = {Alarm.class}, version = 16, exportSchema = false)
public abstract class AlarmDatabase extends RoomDatabase {
private static AlarmDatabase INSTANCE;
public abstract Alarm AlarmDAO();
public static AlarmDatabase getDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context, AlarmDatabase.class, "userdatabase")
.allowMainThreadQueries()//remove this line in production
.fallbackToDestructiveMigration()
.build();
}
return INSTANCE;
}
}
在 MainActivity 中,当我尝试从 AlarmDAO 访问一个方法时,它说它无法解析该方法,
database = AlarmDatabase.getDatabase(this);
database.AlarmDAO().removeAllAlarm();
您在 AlarmDatabase
中没有名为 AlarmDao
的字段。您有一个名为 AlarmDAO()
的方法。因此,调用 AlarmDAO()
方法:
database.AlarmDAO().removeAllAlarm();
分析了我所有的代码后,我意识到我使用了将 AlarmDAO
分配给 Alarm
(我不知道为什么可以接受,因为它们属于不同类型)所以改变这个在 AlarmDatabase.java 中使其开始工作。
@Database(entities = {Alarm.class}, version = 16, exportSchema = false)
public abstract class AlarmDatabase extends RoomDatabase {
private static AlarmDatabase INSTANCE;
public abstract AlarmDAO AlarmDAO();// WAS originally Alarm AlarmDAO();
public static AlarmDatabase getDatabase(Context context) {
...