안드로이드 개발 질문/답변
(글 수 45,052)
다이알로그를 뛰우고
et 에디트텍스트에 녹음의 이름을 입력하고 버튼 btn_input_name을 누르면 이벤트가 발생하도록 했습니다.
dia=new Dialog(mm_RecAudio.this);
dia.setContentView(R.layout.inputdialog);
dia.setTitle("녹음의 이름을 입력하세요.");
et=(EditText)dia.findViewById(R.id.xml_dialog_input);
Button btn_input_name=(Button)dia.findViewById(R.id.xml_btn_input_name);
dia.show();
그리고 입력하고
btn_input_name.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
요안에다가
name=et.getText().toString(); (name은 String이에요.)
이 걸로 다이알로그의 에디트텍스트 et에 입력된 내용을 name에 저장했고요.
그리고 db에 저장된 애 중에 같은 이름이 있는지 검사하기 위해서 아래와 같은 구문을 썼어요.
r 기존에 db에 저장된 이름 중에서 에디트텍스트 et에 입력된 내용과 같으면
i를 증가 시켜서
i가 증가되었다면 같은 이름이 있는거니깐... 녹음을 시작하지 않구요
i가 그대로 0이면 녹음을 시작하려고 하는데요...
int i=0;
//db가 없다면 생성, DBmanager 클래스는 db생성을 위한 클래스에요,
dbmgr=new DBmanager(mm_RecAudio.this);
//DB오픈
sdb=dbmgr.getReadableDatabase();
//db를 cursor로 받음
String sql = "SELECT * FROM members;";
cursor = sdb.rawQuery(sql,null);
//cursor.moveToFirst();
if(cursor.getCount()>0)
{
while(cursor.moveToNext())
{
if(et.getText().toString()==cursor.getString(cursor.getColumnIndex("_id")))
{
i++;
}
}
}
cursor.close();
dbmgr.close();
문제는 기존에 db에 저장되어 있는 이름과 아무리 같은 이름을 입력해도 i가 증가하지 않습니다.
분명히 et.getText().toString()와 cursor.getString(cursor.getColumnIndex("_id"))의 값이 같아보이는데도,,
같은데도 i가 증가하지 않습니다.
테스트용 텍스트뷰를 통해서 테스트를 해봐도 분명 똑같은데,, 왜 같은걸로 판단이 안되는 걸까요?
두 값의 자료형이 틀린건가요? 왜 그런지 도저히 이해가 안갑니다.
db에서는 _id 레코드가 Primary 라서 db에서는 db예외가 생기면서 저장이 안되는데. 왜 쟤들은 같아도 같은지 모르는 걸까요?
부탁드려요... 이 걸로. 별 짓을 다해봤는데.. 잘 안되네요.. 너무 무지해요..
도와주세요.
2012.10.01 14:13:09
if(et.getText().toString()==cursor.g etString(cursor.getColumnIndex("_id")))
이구문에서 ==말고
if(et.getText().toString().equals(cursor.g etString(cursor.getColumnIndex("_id"))))
이렇게 해서 해야될꺼같네요 string은 객체라 ==로 비교시 데이터값이 같은지 보는게 아니라 주소값이 같은지 확임하기때문에 안될꺼에요
이구문에서 ==말고
if(et.getText().toString().equals(cursor.g etString(cursor.getColumnIndex("_id"))))
이렇게 해서 해야될꺼같네요 string은 객체라 ==로 비교시 데이터값이 같은지 보는게 아니라 주소값이 같은지 확임하기때문에 안될꺼에요




로그를 찍어보세요 if문 들어가기전에
et.getText().toString() 의값과
cursor.getString(cursor.getColumnIndex("_id") 값을 찍어보시고 하나하나 차근차근 해보세요.
그리고 cursor의 null 체크는 검색을 통해서 다른 코드로 변경해보시구요.
아마 do while문이 쓰일 겁니다.