I am trying to get db.update to update one of my database rows with new values, but it does not seem to persist. I looked through my syntax, but I cannot force the data to be saved. The insert function works, but is not updated. Any help would be greatly appreciated. Below is my data class that uses the DbHelper object.
public class Data {
static final String TAG = "Data";
public static final String DB_NAME = "data.db";
public static final String TABLE_NAME = "tasks";
public static final String C_ID = "_id";
public static final String C_TASK = "taskname";
public static final String C_DUE_DATE = "due_date";
public static final String C_PRIORITY = "priority";
public static final int DB_VERSION = 1;
Context context;
DbHelper dbHelper;
SQLiteDatabase db;
public Data(Context context) {
this.context = context;
dbHelper = new DbHelper();
}
public void insert(ToDoItem task) {
db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(C_TASK, task.getTask());
values.put(C_PRIORITY, task.getPriority());
db.insert(TABLE_NAME, null, values);
}
public void update(int id, ToDoItem task) {
ContentValues values = new ContentValues();
values.put(C_ID, id);
values.put(C_TASK, task.getTask());
values.put(C_PRIORITY, task.getPriority());
String[] whereArgs = {String.valueOf(id)};
db.update(TABLE_NAME, values, C_ID +" =?", whereArgs);
System.out.println(db.update(TABLE_NAME, values, C_ID +" =?", whereArgs));
Log.d(TAG, "updating task " + db.toString() +" "+ id + " to priority " + task.getPriority());
}
public void delete(int id){
db.delete(TABLE_NAME, C_ID+"="+id, null);
}
public Cursor queueAll(){
db = dbHelper.getWritableDatabase();
String[] columns = new String[]{C_ID, C_TASK, C_DUE_DATE, C_PRIORITY};
Cursor cursor = db.query(TABLE_NAME, columns,
null, null, null, null, null);
return cursor;
}
class DbHelper extends SQLiteOpenHelper {
public DbHelper() {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = String.format("create table %s" +
"(%s int primary key, %s text, %s text, %s int)",
TABLE_NAME, C_ID, C_TASK, C_DUE_DATE, C_PRIORITY);
Log.d(TAG, "onCreate with SQL:"+sql);
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop if exists " + TABLE_NAME);
onCreate(db);
}
}
}
Here is the ToDoItem object class. I am trying to update priority when an item is clicked.
public class ToDoItem {
private String task;
private String dueDate;
private int priority;
public ToDoItem(String task) {
this.task = task;
this.priority = 1;
}
public ToDoItem(String task, String dueDate) {
this.task = task;
this.dueDate = dueDate;
this.priority = 1;
}
public ToDoItem(String task, int priority) {
this.task = task;
if(priority <=3 && priority > 0) {
this.priority = priority;
} else
this.priority = 1;
}
public ToDoItem(String task, String dueDate, int priority) {
this.task = task;
this.dueDate = dueDate;
if(priority <=3 && priority > 0) {
this.priority = priority;
} else
this.priority = 1;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
public String getDueDate() {
return dueDate;
}
public void setDueDate(String dueDate) {
this.dueDate = dueDate;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
if(priority <=3 && priority > 0) {
this.priority = priority;
} else
this.priority = 1;
}
}
, onListItemClickListener ArrayList ToDoItems, . , , . Log.d, , , . - . .
todoList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
long arg3) {
if(soundEnabled) {
playSound();
}
todoItems.get(arg2).setPriority(todoItems.get(arg2).getPriority() + 1);
String name = todoItems.get(arg2).getTask();
int priority = todoItems.get(arg2).getPriority();
final ToDoItem task = new ToDoItem(name, priority);
int id = arg2 + 1;
data.update(id, task);
});