2016-09-13 2 views
0

Я пытаюсь удалить одну строку с помощью onLongClick элемента списка, но иногда удаляет строку, а иногда нет. Возможно, я передаю неправильный идентификатор, я не понимаю, что на самом деле проблема.Удаление одной строки SQLite

Я пробовал код, и я пробую последние 2 дня, но не могу это решить.

Ниже приведен мой код.

@Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, final long id) { 
     AlertDialog.Builder alert = new AlertDialog.Builder(FavouriteListActivity.this); 
     alert.setMessage("Do you want to unfavorite selected item ?"); 
     alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Log.i("===========", "Position === " + position); 
       Log.i("===========", "long id === " + id); 
       deleteMethod(id); 
       showFavouriteList(); 
       dialog.cancel(); 
      } 
     }); 
     alert.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     alert.show(); 
     return true; 
    } 

И Стирания

private void deleteMethod(long Id) { 
     try { 
      long shId = Id + 1; 
      SQLiteDatabase db = OpenHelper.getDataHelper(getApplicationContext()); 
      String query = "DELETE FROM " + LocalDatabase.FAVORITE_LIST.TABLE_FAVOURITE_LIST + " WHERE " + LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_ID + " = " + shId; 
      Log.i("QUERY", "" + query); 
      db.execSQL(query); 
      db.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Я не получаю сообщение об ошибке, хотя, но это не удаление элемента из базы данных или из ListView

+0

это все правильно, я думаю, вы не обновили версию приложения и не обновили OnUpdate метода ур класса dbhelper, просто чтобы избежать всего этого просто unistall приложения от ур тестирования устройства и запустить агу в. – HAXM

+0

@HAXM, спасибо за быстрый ответ. Я пробовал все так много, но ничего не работает. Даже я пробовал обновлять версию, удаляя базу данных и данные с устройства всеми возможными способами ... – user3686177

+0

Вы уверены, что исключение не регистрируется? Вы пытались запустить sql в фоновом потоке? Вы уверены, что логика обновления listview верна? адаптер перезагружается из db? –

ответ

0

Сначала сделайте идентификатор переменной в модели класса и генерировать геттер и сеттер для этого:

public static final String PRIMARY_ID="_id"; 

Теперь установите primeary_id для модели м курсор:

if (cursor.moveToFirst()) { 
      do { 
       model = new FavouriteListVo(lngID, strName); 
        model.setStrName(cursor.getString(cursor.getColumnIndex(LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_NAME))); 
model.setPrimId(cursor.getString(cursor.getColumnIndex(LocalDatabase.FAVORITE_LIST.PRIMARY_ID))); 
       arrayListFav.add(model); 
      } while (cursor.moveToNext()); 
     } 

Теперь для удаления этой строки использовать этот первичный ключ:

public void onClick(DialogInterface dialog, int which) { 
      String id=model.getPrimId(); 
      deleteMethod(id); 
      showFavouriteList(); 
      dialog.cancel(); 
     } 

функция удаления будет exactlu же, как у вас, как я уже говорил в комментариях, что проблема с идентификатором не ваша функция удаления:

private void deleteMethod(long Id) { 
    try { 
     long shId = Id + 1; 
     SQLiteDatabase db = OpenHelper.getDataHelper(getApplicationContext()); 
     String query = "DELETE FROM " + LocalDatabase.FAVORITE_LIST.TABLE_FAVOURITE_LIST + " WHERE " + LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_ID + " = " + shId; 
     Log.i("QUERY", "" + query); 
     db.execSQL(query); 
     db.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+1

Thankyou, Это сработало как шарм ... Ты потрясающий человек .. – user3686177

Смежные вопросы