마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

아무 에러도 뜨지 않는데 원하는 대로 삭제가 안돼요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

0 추천
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
   public boolean onItemLongClick(AdapterView<?> parent, View view,
     final int position, long id) {

    AlertDialog diaBox = new AlertDialog.Builder(
      ListViewTestActivity.this)
      .setTitle("Delete")
      .setMessage("Really Delete?")
      .setIcon(R.drawable.ic_launcher)
      .setPositiveButton("YES",
        new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog,
           int whichButton) {
             SQLiteDatabase db=null;
           if(db==null){
            db=openOrCreateDatabase("test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
           }











~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
private static final String Q_CREATE_TABLE= "CREATE TABLE IF NOT EXISTS "&nbsp; +&nbsp; TB_NAME+ " (_id INTEGER PRIMARY KEY AUTOINCREMENT "
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "," + "title TEXT "
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "," + "contents TEXT"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + ");";
&nbsp;
&nbsp;private final String Q_GET_LIST= "SELECT * FROM test" + " ORDER BY +_id DESC"; 

public class DBManager extends SQLiteOpenHelper {
 private final static String TB_NAME = "test";
 public static final String DB_NAME = "test.db";
 public static final int DB_VERSION = 1;
 public static final String KEY_ID = "_id";
 private int _id=0;
 public static final String TITLE = "title";
 public static final String CONTENTS = "contents";
 String quary ;
 private final String Q_GET_LIST= "SELECT * FROM test" + " ORDER BY +_id DESC"; 
 //constructor
 public DBManager(Context context) {
 super(context, DB_NAME, null,DB_VERSION);
 quary = "CREATE TABLE IF NOT EXISTS "+ TB_NAME&nbsp; +" (_id INTEGER PRIMARY KEY AUTOINCREMENT "
 + "," + " title TEXT "
 + "," + " contents TEXT "
 + ");";
 }

만든 db&테이블은 각각 이것인데 아무 에러도 안뜨고 삭제도 안돼요 ㅠㅠㅠㅠㅠㅠㅠㅠ
yes를 누르면 아무 반응도 일어나지 않습니당 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

 

제발 도와주세요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ table값이 제대로 선택이 안된건가요?? ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

초보 안드롱 (480 포인트) 님이 2014년 5월 31일 질문
초보 안드롱님이 2014년 5월 31일 태그 변경

1개의 답변

+1 추천
 
채택된 답변
DELETE쿼리문은 어디있나요??
YeonMin (17,860 포인트) 님이 2014년 5월 31일 답변
초보 안드롱님이 2014년 6월 1일 채택됨
SQLiteDatabase db=null;
                                         if(db==null){
                                             db=openOrCreateDatabase("test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
                                         }
                                        
                                    
                                        
                                         if(db != null){
                                             //db.close();
                                         }
                                             String query="DELETE FROM test WHERE _id= " + (_id-1);
                                         db.execSQL(query);
                                         //finish(); //현재 액티비티 종료
                                        // Builder.show();
                                    }
                                     
                                }).setNegativeButton("NO", null).create();
                diaBox.show();
                return false;
            }
        });

    }// 수정 한뒤
 
ㅜㅜㅜ 딱 그부분만 빠졌네요 ㅠㅠㅠㅠ 이렇게 하면 delete 되지 않는 건가요?? ㅜㅜ
쿼리만 맞으면 Delete가 되겠죠..ㅎ
아까도 빼먹었을 뿐이구 저대로 했었는데  삭제버튼에서 yes을 누르면 아무런 이벤트도 이루어지지 않아요 ㅎㅎ... ㅜㅜ 삭제가 안됩니당 ㅜㅜ 저기 코드의 id-1을 id로도 해보고 했는데 왜 그럴까요 ㅜㅜ
일단..삭제가 된다면 어떤 반응이 와야하나요?? 리스트뷰 갱신 해보셨어요~?
삭제가 되면 리스트뷰에서 목록이 지워져야해요 onresume코드를 이용해서 db를 받아와서 리스트뷰를 보여주는 형태로 짰었거든요 ㅜㅜ
혹시나해서 껐다켜봤는데도 그대로네요 ㅜㅜ 밑에는 onresume입니당 ㅜㅜ

protected void onResume(){
        super.onResume();
        getDbData();
    }
   
     private void getDbData(){
            SQLiteDatabase db=null;
            if(db==null){
                db=openOrCreateDatabase("test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
            }
           
            //checkTableIsCreated(db); //db에 solo_info 테이블이 있는지 확인
            db.execSQL(Q_CREATE_TABLE);
            Cursor c=db.rawQuery(Q_GET_LIST, null);
            //startManagingCursor(c);
           
            listView=(ListView) findViewById(R.id.listView);
            adapter1=new SimpleCursorAdapter(
                    getApplicationContext(),
                    android.R.layout.simple_list_item_2,
                    c,
                    new String[] {"title", "contents"},
                    new int[] {android.R.id.text1, android.R.id.text2}           
                    );
            listView.setAdapter(adapter1);
            //listView.setDivider(new ColorDrawable(Color.rgb(149, 145, 145)));
            //listView.setDividerHeight(2);
           
            if(db!=null){
                db.close();  
            }
        }
추가(insert)는 잘 되나요??잘 된다면 _id값을 다시 확인해 보시고..혹시나 해서 말씀드리는데...select문에 order할때 저 +가 조금 거슬리는데...
네 추가는 잘돼요 ㅜㅜ 일단 다른것도 확인해볼께요 ㅜㅜ
+ 유무에 상관없이 안되고 있어요 ㅜㅜ
intent.putExtra("id", Long.toString(id));
이 구문이 무슨역할을 하는건가요? id를 받아오는 것같은데 제대로 받아와지지 않는것같아서요 ㅜㅜ id값을 확인할 만한 방법이 없을까여..
검색해봐도 제가 원하는 답이 안보이네용 ㅜㅜ
package net.bibim.listview;

import java.net.URISyntaxException;
import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class ListViewTestActivity extends Activity {
    private final static String TB_NAME = "test";
       public static final String DB_NAME = "test.db";
       public static final int DB_VERSION = 1;
       private int _id=0;  
       public static final String KEY_ID = "_id";
       public static final String TITLE = "title";
       public static final String CONTENTS = "contents";
    EditText editText1;
    Button btnSave;

    Button stopser;
   
    SimpleCursorAdapter adapter1=null;

    static ArrayList<String> arrayList;
    static ArrayAdapter<String> adapter;
    ListView listView;
    ClipboardManager cm;
    Intent intent;
   
    /* basic_info 테이블 생성 쿼리 */

    private static final String Q_CREATE_TABLE= "CREATE TABLE IF NOT EXISTS "  +  TB_NAME+ " (_id INTEGER PRIMARY KEY AUTOINCREMENT "
            + "," + "title TEXT "
            + "," + "contents TEXT"
            + ");";
   
    private final String Q_GET_LIST= "SELECT * FROM test" + " ORDER BY _id DESC";

    BroadcastReceiver receiver;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        stopser = (Button) findViewById(R.id.stopservice);

        btnSave = (Button) findViewById(R.id.btnSave);

        arrayList = new ArrayList<String>();

        adapter = new ArrayAdapter<String>(ListViewTestActivity.this,
                android.R.layout.simple_list_item_1, arrayList);

        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);

        // 기본적인 서비스 만들어보기
        Log.i("TAG", "Controller Activity - startService()");
        Intent myserviceintent = new Intent(this, ServiceApp.class);

        startService(myserviceintent);

        stopser.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(ListViewTestActivity.this,
                        ServiceApp.class);

                stopService(intent);
            }
        });

        /* 저장 버튼 */
        btnSave.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                intent = new Intent(ListViewTestActivity.this, EditClass.class);

                startActivityForResult(intent, 0); // 에디트클래스의 엑티비티에서 다시
                                                    // 돌아옴으로 포리조트함수사용

            }
        });

        /* 리스트뷰 클릭시 인텐트호출 */
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // Toast.makeText(ListViewTestActivity.this,
                // arrayList.get(position), Toast.LENGTH_SHORT).show();
                intent = new Intent(ListViewTestActivity.this,
                        SubActivity.class);
               
                intent.putExtra("ContentEditStr", arrayList.get(position));
                intent.putExtra("TitleEditStr", arrayList.get(position));
                startActivity(intent);
            }
        });

        /* 리스트뷰 롱클릭시 삭제 다이얼로그 */
        listView.setOnItemLongClickListener(new OnItemLongClickListener() {
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    final int position, long id) {

                AlertDialog diaBox = new AlertDialog.Builder(
                        ListViewTestActivity.this)
                        .setTitle("Delete")
                        .setMessage("Really Delete?")
                        .setIcon(R.drawable.ic_launcher)
                        .setPositiveButton("YES",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int whichButton) {
                                           SQLiteDatabase db=null;
                                         if(db==null){
                                             db=openOrCreateDatabase("test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
                                         }
                                        
                                    
                                        
                                         if(db != null){
                                             //db.close();
                                         }
                                         //intent.putExtra("id", Long.toString(_id));
                                          Cursor cursor = db.rawQuery("SELECT * FROM test", null);

                                         cursor.moveToPosition(_id);
                                         int i = cursor.getInt(cursor.getColumnIndex("_id"));
                                         db.execSQL("DELETE FROM test WHERE _id = "+i+" ");   
                                     //    String query="DELETE FROM test WHERE _id= " + _id;
                                         //db.execSQL(query);
                                         //finish(); //현재 액티비티 종료
                                        // Builder.show();
                                    }
                                     
                                }).setNegativeButton("NO", null).create();
                diaBox.show();
                return false;
            }
        });

    }// 수정 한뒤
 
   
    protected void onResume(){
        super.onResume();
        getDbData();
    }
   
     private void getDbData(){
            SQLiteDatabase db=null;
            if(db==null){
                db=openOrCreateDatabase("test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
            }
           
            //checkTableIsCreated(db); //db에 solo_info 테이블이 있는지 확인
            db.execSQL(Q_CREATE_TABLE);
            Cursor c=db.rawQuery(Q_GET_LIST, null);
            //startManagingCursor(c);
           
            listView=(ListView) findViewById(R.id.listView);
            adapter1=new SimpleCursorAdapter(
                    getApplicationContext(),
                    android.R.layout.simple_list_item_2,
                    c,
                    new String[] {"title", "contents"},
                    new int[] {android.R.id.text1, android.R.id.text2}           
                    );
            listView.setAdapter(adapter1);
            //listView.setDivider(new ColorDrawable(Color.rgb(149, 145, 145)));
            //listView.setDividerHeight(2);
           
            /* 선택한 리스트 자세히 보기 (List 액티비티 -> View 액티비티) */
            listView.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent=new Intent(ListViewTestActivity.this, EditClass.class);
                    intent.putExtra("id", Long.toString(id)); //id 값을 넘겨줘야 수정, 삭제가 가능
                    startActivity(intent);
                }
            });
           
            if(db!=null){
                db.close();  
            }
        }
     
     /* DB에 테이블 존재 유무 확인 함수 */
        private void checkTableIsCreated(SQLiteDatabase db){
            Cursor c=db.query("test",null,null,null, null, null, null);  //시스템 카탈로그에서 커서로 테이블 이름을 확인
            Integer cnt=0;
            c.moveToFirst();
            while(c.isAfterLast()==false){
                cnt=c.getInt(0);
                c.moveToNext();
            }
            c.close();
           
            if(cnt==0){
                db.execSQL(Q_CREATE_TABLE); //DB에 테이블이 없으면 테이블 생성 쿼리 실행
            }
        }
   
   
    public static void copytext(String copyContents) {
        Log.i("copytext", "copyContents "+copyContents );
       
        arrayList.add( "_" + copyContents); // 이렇게 보여주기위한문.
        adapter.notifyDataSetChanged();// 어뎁터에게 초기화 됨을 알리는 문

    }
    protected void onActivityResult(int requestCode, int resultCode, Intent Data) {
        super.onActivityResult(requestCode, resultCode, Data);
        String tile = "null";
        String contents = "null";
        Intent intent = Data;

        tile = intent.getStringExtra("TitleEditStr").toString(); // 제목의 글을 가져오는
                                                                    // 문
        contents = intent.getStringExtra("ContentEditStr").toString(); // 내용의 글을
                                                                        // 가져오는
                                                                        // 문

        switch (requestCode) {
        case 0:

            arrayList.add(tile + "_" + contents); // 이렇게 보여주기위한문.
            adapter.notifyDataSetChanged();// 어뎁터에게 초기화 됨을 알리는 문

            break;
        case 1:
            break;
        default:
            break;
        }

    }

}
package net.bibim.listview;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
     
public class DBManager extends SQLiteOpenHelper {
    private final static String TB_NAME = "test";
       public static final String DB_NAME = "test.db";
       public static final int DB_VERSION = 1;
       
       public static final String KEY_ID = "_id";
       private int _id=0;
       public static final String TITLE = "title";
       public static final String CONTENTS = "contents";
        String quary ;
        
        private final String Q_GET_LIST= "SELECT * FROM test" + " ORDER BY _id DESC";
        
       //constructor
        public DBManager(Context context) {
            super(context, DB_NAME, null,DB_VERSION);
             
            quary = "CREATE TABLE IF NOT EXISTS "+ TB_NAME  +" (_id INTEGER PRIMARY KEY AUTOINCREMENT "
                    + "," + " title TEXT "
                    + "," + " contents TEXT "
                    + ");";
        }
         
     
        //테이블을 생성
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(quary);              
             
        }
        //업그레이드
       @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   }
}
id가 들어가는건 이 두코드뿐인데 이 코드중에서 id가 이상한게 없는 것 같아요...
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040104&docId=168328776&page=1#answer1

이곳을 참고해보면 longclick을 사용하면 뭔가 방법이 다른것같은데 그래서 그런가요?? ㅜㅜ
_id에 값을 받아오는 부분이 없는거 같네요...리스트뷰 만들때 데이터 저장하는 곳에 _id도 저장해서 롱클릭할때 position값 이용해서 _id값을 빼와서 삭제하면 되겠네요
/* 리스트뷰 롱클릭시 삭제 다이얼로그 */
        listView.setOnItemLongClickListener(new OnItemLongClickListener() {
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    final int position, long id) {

                AlertDialog diaBox = new AlertDialog.Builder(
                        ListViewTestActivity.this)
                        .setTitle("Delete")
                        .setMessage("Really Delete?")
                        .setIcon(R.drawable.ic_launcher)
                        .setPositiveButton("YES",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int whichButton) {
                                           SQLiteDatabase db=null;
                                         if(db==null){
                                             db=openOrCreateDatabase("test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
                                         }
                                        
                                    
                                        
                                         if(db != null){
                                             //db.close();
                                         }
                                     //    intent.putExtra("id", Long.toString(_id));
                                        
                                          Cursor cursor = db.rawQuery("SELECT * FROM test", null);
                                        
                                         cursor.moveToPosition(_id);
                                         int i = cursor.getInt(cursor.getColumnIndex("_id"));
                                     db.execSQL("DELETE FROM test WHERE _id = "+i+" ");   
                                  //List 액티비티에서 넘긴 선택한 리스트뷰의 id 값
                                 //    String id=getIntent().getExtras().getString("id");
                                 //    _id=Integer.parseInt(id); // _id 값으로 질의를 하려면 정수형으로 형 변환해야 함
                                     Cursor c=db.rawQuery(Q_GET_LIST, null);
                                     listView=(ListView) findViewById(R.id.listView);
                                     adapter1=new SimpleCursorAdapter(
                                             getApplicationContext(),
                                             android.R.layout.simple_list_item_2,
                                             c,
                                             new String[] {"title", "contents"},
                                             new int[] {android.R.id.text1, android.R.id.text2}           
                                             );
                                     listView.setAdapter(adapter1);
                                         //String query="DELETE FROM test WHERE _id= " + _id;
                                         //db.execSQL(query);
                                         //finish(); //현재 액티비티 종료
                                        // Builder.show();
                                    }
                                     
                                }).setNegativeButton("NO", null).create();
                diaBox.show();
                return false;
            }
        });
이렇게 넣었더니 지워는 지더라구요 ㅜㅜ 근데 id값이 스트링이라서 그런지 그걸 못받아오고 int id=0;으로 했더니 첫번째꺼만 계속 지워지네요 ㅜㅜ 다른건 스트링이라서 ++를 할 수 없을 것 같은데 테이블 내에서 id를 ++하는 방법이 있을까요 ㅜㅜ
/* 리스트뷰 롱클릭시 삭제 다이얼로그 */
        listView.setOnItemLongClickListener(new OnItemLongClickListener() {
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    final int position, long id) {
            //    String[] from = new String[] { BaseColumns._ID, COL1 };
            //    int[] to = new int[] { R.id.rec_id, R.id.rec_memo };
                switch(position){
                default:
                AlertDialog diaBox = new AlertDialog.Builder(
                        ListViewTestActivity.this)
                        .setTitle("Delete")
                        .setMessage("Really Delete?")
                        .setIcon(R.drawable.ic_launcher)
                        .setPositiveButton("YES",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int whichButton) {
                                           SQLiteDatabase db=null;
                                         if(db==null){
                                             db=openOrCreateDatabase("test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
                                         }
                                        
                                    
                                        
                                         if(db != null){
                                             //db.close();
                                         }
                                     //    intent.putExtra("id", Long.toString(_id));
                                        
                                        
                                         //System.out.println("_id -> " + "_id");

                                          Cursor cursor = db.rawQuery("SELECT * FROM test", null);
                                     //    int id=0;
                                     //    id=Integer.parselnt("_id");
                                         cursor.moveToPosition(position);
                                         int i = cursor.getInt(cursor.getColumnIndex("_id"));
                                     db.execSQL("DELETE FROM test WHERE _id = "+i+" ");   
                                  //List 액티비티에서 넘긴 선택한 리스트뷰의 id 값
                                 //    String id=getIntent().getExtras().getString("id");
                                 //    _id=Integer.parseInt(id); // _id 값으로 질의를 하려면 정수형으로 형 변환해야 함
                                     Cursor c=db.rawQuery(Q_GET_LIST, null);
                                     listView=(ListView) findViewById(R.id.listView);
                                     adapter1=new SimpleCursorAdapter(
                                             getApplicationContext(),
                                             android.R.layout.simple_list_item_2,
                                             c,
                                             new String[] {"title", "contents"},
                                             new int[] {android.R.id.text1, android.R.id.text2}           
                                             );
                                     listView.setAdapter(adapter1);
                                         //String query="DELETE FROM test WHERE _id= " + _id;
                                         //db.execSQL(query);
                                         //finish(); //현재 액티비티 종료
                                        // Builder.show();
                                    }
                                     
                                }).setNegativeButton("NO", null).create();
                diaBox.show();
                break;
                }
                return false;
            }
           
           
               
           
       
           
            });
       

    }// 수정 한뒤

position 값을 받아왔는데 position이랑 id랑 따로 돌아가네용.. ㅜ 대칭적으로 지워져요..
아무튼 감사합니당 !!!!!!!!!!!!!!
일단 int형을 스트링으로 바꾸는건 Integer.toSting입니다~
부족한 답변이라 만족 못 시켜드린점 죄송합니다 ㅜ
아니에요 ㅎㅎ 감사합니다!! 진짜 ㅠㅠㅠ
...