Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法更新文件室数据库中的布尔数组_Java_Android_Android Room_Dao_Android Database - Fatal编程技术网

Java 无法更新文件室数据库中的布尔数组

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

我试图更新android room数据库中的布尔数组,但它抛出了这个错误

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