В моем приложении я могу повторно отсортировать позицию строк ListView путем перетаскивания & drop и сохранить новый порядок строк в базе данных. ListView Показывает содержимое ArrayList определяется следующим образом:Android ContentValues weird Из-за удаления области
ArrayList<ContentValues> lstBat;
и заполняются из базы данных SQLite. После заполнения списка я добавляю некоторые значения в «ContentValues», которые я использую в адаптере Array.
Проблема возникает в методе re_sort после выполнения «dbTools.updateBat (cv)».
public void re_sort() {
int lines= lstBat.size();
ContentValues cv=null;
for (int i = 0; i < lines; i++) {
cv = lstBat.get(i); //get row's cv
cv.put("order", i); //Assign new order
dbTools.updateBat(cv); //Store new order in the list
lstBat.set(i, cv);
}
}
значений «состояние», «значок» и «дата» более не в локальной переменной «сорта» (ContentValues), они были удалены слишком !!!!!
метод updateBat определен в классе DBTools
public int updateBat (ContentValues cv){
SQLiteDatabase database = this.getWritableDatabase();
cv.remove("state"); //Not a column of the table
cv.remove("icon"); //Not a column of the table
cv.remove("date"); //Not a column of the table
return database.update(TABLE_bat, cv, "batId"+"=?", new String[]{cv.getAsString("batId")});
}
И это обходной путь:
public void re_sort() {
int lines= lstBat.size();
long date=0;
String state="";
int icon=0;
ContentValues cv=null;
for (int i = 0; i < lines; i++) {
cv = lstBat.get(i);
date=cv.getAsLong("date");
icon=cv.getAsInteger("icon");
state=cv.getAsString("state");
cv.put("order", i);
dbTools.updateBat(cv);
cv.put("state",state);
cv.put("icon",icon);
cv.put("date",date);
lstBat.set(i, cv);
}
}
Если я закомментировать dbTools.updateBat (резюме) значения сохраняются, и, конечно, база данных не будет обновляться.
Почему вы вызываете cv.remove («state») ;? –