Java 无法更新文件室数据库中的布尔数组
我试图更新android room数据库中的布尔数组,但它抛出了这个错误Java 无法更新文件室数据库中的布尔数组,java,android,android-room,dao,android-database,Java,Android,Android Room,Dao,Android Database,我试图更新android room数据库中的布尔数组,但它抛出了这个错误 E/SQLiteLog:(1)靠近“?”:在“更新报警表集mDaysOfWeekArr=?、?、?、?、?、?其中mAlarmId=?”中出现语法错误。 查询:(AlarmDao.java) 插入/读取布尔数组时,正确的值保存在db中(使用查询) 房间数据库存储库(AlarmRepository.java) 使用recyclerView中的onClick调用上述函数,并使用getter从实体读取数据,并更改布尔值[] da
E/SQLiteLog:(1)靠近“?”:在“更新报警表集mDaysOfWeekArr=?、?、?、?、?、?其中mAlarmId=?”中出现语法错误。
查询:(AlarmDao.java)
插入/读取布尔数组时,正确的值保存在db中(使用查询)
房间数据库存储库(AlarmRepository.java)
使用recyclerView中的onClick调用上述函数,并使用getter从实体读取数据,并更改布尔值[]
daysOfWeek[1] = true;
daysOfWeek[5] = true
ar.updateRecAlarmStatus(daysOfWeekArr, alarmId);
实体类:(AlarmEntity.java)
类型转换器
public class Converter {
// Used by AlarmEntity Boolean[] mDaysOfWeek
@TypeConverter
public static Boolean[] fromString(String value) {
Type listType = new TypeToken<Boolean[]>() {
}.getType();
Log.e("Converter: ", "fromString Called");
return new Gson().fromJson(value, listType);
}
@TypeConverter
public static String fromBoolean(Boolean[] list) {
Gson gson = new Gson();
Log.e("Converter: ", "fromString Called");
return gson.toJson(list);
}
}
mDaysOfWeekArr
在SQLite中存储为TEXT
,因此不能执行updatealarm\u表集mDaysOfWeekArr=:daysOfWeekArr,其中mAlarmId=:alarmId
带有布尔[]
,因此会出现该错误
我将您的Dao方法更改为void updateRecAlarmStatus(String daysOfWeekArr,int alarmId)
,并在调用此方法之前进行JSON转换
编辑:当Dao方法具有
@Query
注释时,Room似乎不能使用类型转换器。类型转换器与@Query一起使用
public void updateRecAlarmStatus(final Boolean[] daysOfWeekArr, final int alarmId) {
databaseWriteExecutor.execute(new Runnable() {
@Override
public void run() {
alarmDao.updateRecAlarmStatus(daysOfWeekArr, alarmId);
}
});
}
daysOfWeek[1] = true;
daysOfWeek[5] = true
ar.updateRecAlarmStatus(daysOfWeekArr, alarmId);
@Entity(tableName = "alarm_table")
public class AlarmEntity {
// ID used to disable / enable / delete alarms
@PrimaryKey
private int mAlarmId;
// Trigger time for alarm
private long mAlarmTime;
private boolean mAlarmEnabled;
@TypeConverters({Converter.class})
private Boolean[] mDaysOfWeekArr;
......
...... }
public class Converter {
// Used by AlarmEntity Boolean[] mDaysOfWeek
@TypeConverter
public static Boolean[] fromString(String value) {
Type listType = new TypeToken<Boolean[]>() {
}.getType();
Log.e("Converter: ", "fromString Called");
return new Gson().fromJson(value, listType);
}
@TypeConverter
public static String fromBoolean(Boolean[] list) {
Gson gson = new Gson();
Log.e("Converter: ", "fromString Called");
return gson.toJson(list);
}
}
@TypeConverters({Converter.class})
@Query("UPDATE alarm_table SET mDaysOfWeekArr=:daysOfWeekArr WHERE mAlarmId=:alarmId")
void updateRecAlarmStatus(Boolean[] daysOfWeekArr, int alarmId);