2016-09-13 3 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; 
    } 

그리고 deleteMethod

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(); 
     } 
    } 

그래도, 어떤 오류가 발생하고 있지 않다, 그러나

+0

그것의 모든 올바른, 난 그냥이 모든 것을 피하기 위해 단지 UR 테스트 장치에서 응용 프로그램을 UNISTALL 및 AGA를 실행하면 응용 프로그램의 버전을 업데이트하지 통해 UR dbhelper 클래스의의 OnUpdate 방법을 업데이트하지 않은 것 같아요 에서. – HAXM

+0

@HAXM, 빠른 답장을 보내 주셔서 감사합니다. 나는 너무 많은 것을 시도했다. 그러나 아무 것도 작동하지 않는다. .. 나는 가능한 모든 방법으로 데이터베이스와 데이터를 제거하면서 버전을 업데이트하려고 시도했다. ... – user3686177

+0

예외가 기록되지 않습니까? 백그라운드 스레드에서 sql을 실행 해 보셨습니까? listview 새로 고침 논리가 맞습니까? DB에서 다시로드되는 어댑터입니까? –

답변

0

먼저 모델 클래스의 id 변수를 만들 데이터베이스 또는 목록보기에서 항목을 삭제하지 않고 다음을 위해 getter 및 setter를 생성하십시오.

public static final String PRIMARY_ID="_id"; 

이제 primeary_id를 내가 코멘트에서 언급 한 바와 같이 문제가 ID로하지 당신을 것을,

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

삭제 기능은 당신 같은 exactlu되어 해당 행이 기본 키를 사용하여 삭제하는 지금

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()); 
     } 

: 커서를 해요 삭제 기능 :

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

고마워요, 이건 마치 매력처럼 ... 당신은 멋진 사람입니다. – user3686177