2016-05-08 5 views
0

Ich habe ein Problem mit dem Löschen von Daten aus SQL-Datenbank. In meiner App habe ich Listenansicht mit benutzerdefinierten Adapter und sqlhelper, nach dem Löschen von Daten aus der Liste und Neustarten von App-Daten Zustand bleibt gleich.Lösche Zeilenmethode in SqLiteHelper

Helper Code

public class TaskerDbHelper extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION =12; 
    // Database Name 
    private static final String DATABASE_NAME = "taskerManager"; 
    // tasks table name 
    private static final String TABLE_TASKS = "tasks"; 
    // tasks Table Columns names 
    private static final String KEY_ID = "id"; 
    private static final String KEY_TASKNAME = "taskName"; 
    private static final String KEY_STATUS = "status"; 
    public TaskerDbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_TASKS + " (" 
     + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + KEY_TASKNAME+ " TEXT, " 
     + KEY_STATUS + " INTEGER)"; 
     db.execSQL(sql); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldV, int newV) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_TASKS); 
     // Create tables again 
     onCreate(db); 
    } 
    public void addTask(Task task) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_TASKNAME, task.getTaskName()); // task name 
// status of task- can be 0 for not done and 1 for done 
     values.put(KEY_STATUS, task.getStatus()); 

// Inserting Row 
     db.insert(TABLE_TASKS, null, values); 
     db.close(); // Closing database connection 

    } 

    public List<Task> getAllTasks() { 
     List<Task> taskList = new ArrayList<Task>(); 
// Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_TASKS; 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
// looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Task task = new Task(); 
       task.setId(cursor.getInt(0)); 
       task.setTaskName(cursor.getString(1)); 
       task.setStatus(cursor.getInt(2)); 
// Adding contact to list 
       taskList.add(task); 
      } while (cursor.moveToNext()); 
     } 
// return task list 
     return taskList; 
    } 

    public void updateTask(Task task) { 
// updating row 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_TASKNAME, task.getTaskName()); 
     values.put(KEY_STATUS, task.getStatus()); 
     db.update(TABLE_TASKS, values, KEY_ID + " = ?", 
       new String[]{String.valueOf(task.getId())}); 
    } 



    public void deleteRow(Task task){ 

     SQLiteDatabase db = this.getWritableDatabase(); 
     try 
     { 
      db.delete(TABLE_TASKS, "KEY_TASKNAME = ?", new String[] { task.getTaskName() }); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      db.close(); 
     } 
    } 



} 

Daten in Fragmente Bindung

db = new TaskerDbHelper(getActivity()); 
     list = db.getAllTasks(); 
     adapt = new TaskAdapter(getActivity(), R.layout.taskitem, list); 
     ListView listTask = (ListView) getView().findViewById(R.id.TaskList); 
     listTask.setAdapter(adapt); 

Den Versuch, Daten aus der Liste zu löschen, in onItemLongClickListener

Task currTask = list.get(position); 
            textField.setText(currTask.getTaskName()); 
            db.deleteRow(currTask); 
            list.remove(position); 
            adapt.notifyDataSetChanged(); 

Aufgabe ist einfach Klasse mit 3 String Feldern und 3-Setter und Getter.

Ich kann Daten löschen, während app runnig ist, aber wenn ich App neu starte, wird nichts gelöscht. Danke für die Hilfe!

Antwort

0

keine Garantie, aber versuchen, diese

db.delete(TABLE_TASKS, KEY_TASKNAME + "= ?", new String[] { task.getTaskName() }); 
+0

Danke, seine jetzt arbeiten! –