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

프로필을 추가/삭제 하는 리스트뷰를 작성하고 있습니다. 도와주세요~ [closed]

0 추천
	public void mOnClick(View v) {
		EditText eName = (EditText)findViewById(R.id.newname);
		EditText eNum = (EditText)findViewById(R.id.newnumber);
		switch (v.getId()) {
		case R.id.add:
			String nameText = eName.getText().toString();
			int numText = 0;
			if (nameText.length() != 0) {
				try {
					numText = Integer.parseInt(eNum.getText().toString());
					insertData(nameText, numText);
			        cursor.moveToLast();
			        id_arr.add(cursor.getInt(0));
			        name_arr.add(cursor.getString(1));
			        number_arr.add(cursor.getInt(2));
				}
				catch(NumberFormatException e) {
		            Toast.makeText( this, "전화번호는 정수를 입력해야 합니다.", Toast.LENGTH_LONG).show();
		            break;
				}
				
				Adapter.notifyDataSetChanged();
				list.setAdapter(Adapter);
				
				eName.setText("");
				eNum.setText("");
			}
			break;
		case R.id.delete:
			final Integer selectedPos = list.getCheckedItemPosition();
			Integer position = id_arr.get(selectedPos);
			final String query = "delete from profile where _id = "+ position;
			db.execSQL(query);
			list.clearChoices();
			break;
		}
		Adapter.notifyDataSetChanged();
		// 저장 버튼 누른 후 키보드 안보이게 하기
		InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(eNum.getWindowToken(), 0);
	}

 

버튼을 클릭했을때 DB에 데이터가 추가 되는것을 작성하고 있는데...

처음 어플을 실행시 추가하면 제대로 잘 추가 됩니다.

근데 두번째 추가했을 때 첫번째 추가 했던 이름으로 추가 됩니다. (같은 이름이 두개)

다시, 어플을 실행 시키면 두번째 추가했던게 제대로 추가되어있습니다.

 

그리고 삭제할 경우, 삭제 하면 화면에는 삭제가 안된것 처럼 보이지만, 어플을 껐다 다시 시작하면 제대로 삭제 되어있습니다.

 

어떤 점이 문제 일까요..?ㅜ

 

질문을 종료한 이유: 질문을 잘못함
Amar (600 포인트) 님이 2014년 8월 19일 질문
Amar님이 2014년 8월 19일 closed
    private void insertData(String name, int number){
   	 
        db.beginTransaction();
 
        try{
            String query = String.format("INSERT INTO profile VALUES (null, '%s', %d );", name, number);
            db.execSQL(query);
            db.setTransactionSuccessful();
        }catch(Exception e){
            e.printStackTrace();
            Toast.makeText( this, "추가 실패.", Toast.LENGTH_SHORT).show();
        }finally{
        	Toast.makeText( this, "추가 성공.", Toast.LENGTH_SHORT).show();
            db.endTransaction();
			
        }
    }
    
	public void selectData() {
        String query = "select * from profile";
        Cursor result = db.rawQuery(query, null);
        result.moveToFirst();
        while(!result.isAfterLast()){
            int s_id = result.getInt(0);
            String s_name = result.getString(1);
            int s_number = result.getInt(2);
            Log.d("확인", "_id : " + s_id + ", 이름 : " + s_name + ", 전화번호 : " + s_number);
            result.moveToNext();
        }
        result.close();
    }
	
	public void selectAll() {
        String query = "select * from profile";
        Cursor result = db.rawQuery(query, null);
        result.moveToFirst();
        while(!result.isAfterLast()){
            id_arr.add(result.getInt(0));
            name_arr.add(result.getString(1));
            number_arr.add(result.getInt(2));
            result.moveToNext();
        }
        result.close();
    }

insertData(), selectData(), selectAll() 소스 입니다. 여기에서 문제가 있을수도 있을거 같아 올립니다.

db가 아니라 리스트뷰 쪽에서 문제가 생긴 것 같아요
어플을 다시 시작 하면 정상이란 이야기는 DB 는 값이 잘 들어갔다는 소리구요. Adapter를 어떤 것을 사용 했는지 모르겠으나, 보통 값을 바꾸고 나면 query를 다시 하던지 해야 합니다.
ArrayAdapter 로 ListView를 담았습니다. 문제 있는건가요?
쓴다고 문제있는게 아니라 잘 못 쓴게 문제겠죠...
...