title: How do I delete by ID in SQLite?
body: <p>I am quite new Android Development and figured I should start by trying to create a simple ToDo List App using SQLite. I have all of the basic functionality in place: adding, updating, and deleting tasks. However, I am adding, updating, and deleting by the title of the task, rather than by the ID. This creates problems with duplicate tasks (e.g. tasks of the same name are deleted simultaneously). After much internet search, I still cannot find a way to do this. I would appreciate any help offered!</p>
  
  <p>Here's my code:</p>
  
  <pre><code>public class TaskDbHelper extends SQLiteOpenHelper {
  
      public TaskDbHelper(Context context) {
          super(context, TaskContract.DB_NAME, null, TaskContract.DB_VERSION);
      }
  
      @Override
      public void onCreate(SQLiteDatabase sqLiteDatabase) {
          String createTable = "CREATE TABLE " + TaskContract.TaskEntry.TABLE + " ( " +
                  TaskContract.TaskEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                  TaskContract.TaskEntry.COL_TASK_TITLE + " TEXT NOT NULL, " +
                  TaskContract.TaskEntry.COL_TASK_DATE + " DATE);";
          sqLiteDatabase.execSQL(createTable);
      }
  }
  </code></pre>
  
  <p>Activity where tasks are shown</p>
  
  <pre><code>public class ShowTaskActivity extends AppCompatActivity {
  
      private TaskDbHelper mHelper;
      private ListView mTaskListView;
      private ArrayAdapter&lt;String&gt; mAdapter;
  
      @Override 
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_task);
  
          mHelper = new TaskDbHelper(this);
          mTaskListView = (ListView) findViewById(R.id.list_todo);
  
          updateUI();
      }
  
      private void updateUI() {
          ArrayList&lt;String&gt; taskList = new ArrayList&lt;&gt;();
          SQLiteDatabase sqLiteDatabase = mHelper.getReadableDatabase();
          Cursor cursor = sqLiteDatabase.query(
                  TaskContract.TaskEntry.TABLE,  // Name of the table to be queried
                  new String[]{  // Which columns are returned
                          TaskContract.TaskEntry._ID,
                          TaskContract.TaskEntry.COL_TASK_TITLE,
                          TaskContract.TaskEntry.COL_TASK_DATE},
                  null, null, null, null, null);
          while (cursor.moveToNext()) {
              int index =     cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TITLE);
              taskList.add(cursor.getString(index));
          }
  
          if (mAdapter == null) {
              mAdapter = new ArrayAdapter&lt;&gt;(this,
                      task, // What view to use for the items
                      R.id.task_title, // Where to put the string of data
                      taskList); // Where to get the data
              mTaskListView.setAdapter(mAdapter);
          } else {
              mAdapter.clear();
              mAdapter.addAll(taskList);
              mAdapter.notifyDataSetChanged();
          }
  
          cursor.close();
          sqLiteDatabase.close();
      }
  
      // TODO: Change to delete by ID, not name
      public void deleteTask(View view) {
          View parent = (View) view.getParent();
          TextView taskTextView = (TextView) parent.findViewById(R.id.task_title);
          String task = taskTextView.getText().toString();
          SQLiteDatabase sqLiteDatabase = mHelper.getWritableDatabase();
          sqLiteDatabase.delete(
              TaskContract.TaskEntry.TABLE,  // Where to delete
              TaskContract.TaskEntry.COL_TASK_TITLE + " = ?",  // Boolean check
              new String[]{task});  // What to delete
          sqLiteDatabase.close();
          updateUI();
      }
  }
  </code></pre>
  
  <p>Task adding Code</p>
  
  <pre><code>public void addTask(String task, String date) {
      SQLiteDatabase sqLiteDatabase = mHelper.getWritableDatabase();
      ContentValues contentValues = new ContentValues();
      contentValues.put(TaskContract.TaskEntry.COL_TASK_TITLE, task);
      contentValues.put(TaskContract.TaskEntry.COL_TASK_DATE, date);
      sqLiteDatabase.insertWithOnConflict(
              TaskContract.TaskEntry.TABLE,
              null,
              contentValues,
              SQLiteDatabase.CONFLICT_REPLACE);
      sqLiteDatabase.close();
  }
  </code></pre>