Не удается найти ошибку в коде. Я уверен, что могут быть некоторые проблемы с ID. Возможно, вопросы неверны. Своего нового в этом.Невозможно обновить элемент в базе данных [sqlite]
MyDBHelper
public void onClick(DialogInterface dialog, int whichButton) {
String EditTextValue = edittext.getText().toString();
Task t = new Task(EditTextValue);
dbHandler.updateTask(t);
if (dbHandler.updateTask(t) == true){
Toast.makeText(MainActivity.this, "IR", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(MainActivity.this, "naah", Toast.LENGTH_LONG).show();
}
displayTaskList();
}
функция Update:
public boolean updateTask(Task t){
boolean result = false;
String q = "SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " = " + t.getID();
SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(q, null);
if (c.moveToFirst())
{
String q2 = "UPDATE " + TABLE_NAME + " SET " + COLUMN_TASK + " = "
+ t.getTASK() + " WHERE " + COLUMN_ID + " = " + t.getID();
db.execSQL(q2);
result = true;
}
db.close();
return result;
}
класс Задача:
public class Task {
private int _id;
private String _task;
public Task() {}
public Task(String task){
this._task = task;
}
public Task (int id, String task){
this._id = id;
this._task = task;
}
// SETS&GETS
public void setID(int id) {
this._id = id;
}
public int getID() {
return this._id;
}
public void setTASK(String task){
this._task = task;
}
public String getTASK(){
return this._task;
}
}
Mainactivity:
// To detect which list item is selected (by ID)
private long _id;
public void setID(long id) { this._id = id; }
public long getID() { return this._id; }
// Attaches a long click listener to the listview
private void setupListViewListener() {
lvTasks.setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapter,
View item, int pos, long id) {
item1.setVisible(true); item2.setVisible(true); item3.setVisible(true); // Showing all buttons
setID(id); //Catches the selected items ID
return true;
}
});
}
Проблема может заключаться в том, что она смешивает ID? Например, в Mainactivity ID, который я получаю, выбрана задача (onlongclick), но в идентификаторе класса Task/MyDBHelper это вновь созданная задача - даже если они не связаны (?). Любая помощь будет отличной.
Какая у вас ошибка, если таковая имеется? Кстати, ваш текущий запрос создает предложение WHERE, используя raw concatenation, оставляя запрос уязвимым для SQL-инъекции. Вы должны параметризовать запросы. –
@TimBiegeleisen Можете ли вы дать мне подсказку? Проблема в том, что ничего не происходит. Мне нужно отредактировать задачу, но она оставила ее нетронутой, и проблема в том, что функция update возвращает false (это означает, что что-то не удалось, вместо обновления и возврата true) – JasonM