@Override
public void onClick (View v)
{
boolean isExist = false;
boolean isExist2 = false;
boolean isExist3 = false;
boolean isExist4 = false;
if( v.getId() == R.id.bt1)
{
for(int i=0, n = arrNameList.size(); i<n ; i++)
{
if(ed1.getText().toString().equals(arrNameList.get(i)))
{
if(ed2.getText().toString().equals(arrPhoneList.get(i)))
{ //둘다존재
isExist = true;
isExist2 = true;
}
else
{ //이름만존재
isExist = false;
isExist2 = true;
}
}
else
{//둘다없음
isExist = false;
isExist2 = false;
}
}
if (isExist2)
{
if(isExist)
{
Toast.makeText(MainActivity.this, "둘다추가실패",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(MainActivity.this, "이름때문에추가실패",Toast.LENGTH_LONG).show();
}
}
else
{
ed1.setText("");
ed2.setText("");
Toast.makeText(MainActivity.this, "둘다추가성공",Toast.LENGTH_LONG).show();
String[] projection = new String[]{
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
};
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor c = managedQuery(Phone.CONTENT_URI, projection, null, null, sortOrder); //폰북의 주소록을 가리키고있음
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,ed1.getText().toString())
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, ed2.getText().toString())
.withValue(ContactsContract.CommonDataKinds.Email.TYPE,
ContactsContract.CommonDataKinds.Email.TYPE_WORK)
.build());
try{
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}catch(RemoteException e){
//TODO Auto-generated catch block
e.printStackTrace();
}catch (OperationApplicationException e){
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
else if(v.getId() == R.id.bt2)
{
for(int i=0, n = arrNameList.size(); i<n ; i++)
{
if(ed1.getText().toString().equals(arrNameList.get(i)) )
{
if(ed2.getText().toString().equals(arrPhoneList.get(i)))
isExist4 = true;
isExist3 = true;
}
else
{
isExist4 = false;
isExist3 = true;
}
}
else
{
isExist3 = false;
isExist4 = false;
}
}
if (isExist3)
{
if(isExist4)
{
Toast.makeText(MainActivity.this, "둘다이미존재하는연락처",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(MainActivity.this, "이름만존재",Toast.LENGTH_LONG).show();
}
}
else
{
Toast.makeText(MainActivity.this, "둘다 존재하지 않습니다.",Toast.LENGTH_LONG).show();
}
}
}
}
제가현재 문제를일으키고있는소스입니다.
내부주소록의 전화번호와 이름을 가져온다음 edittext의 입력값과 비교하는 소스입니다.
edittext에서 입력값을받는데 비교할꺠 무조건 else로 가버립니다... if문을 거치질않는거같아요...
equals로 비교값을넣었는데도불구하고 작동을하질않습니다... 왜이럴까요...
음... 로직을 순차적으로 따라가다보면 이해가 되실겁니다만 대략 설명을 해드리면
for문을 10번을 돌게 될경우 1번째에 2개의 boolean형이 true가 된다고 해도 for문을 빠져나오지 않기 때문에 2번째 일을 수행할겁니다.
그럼 당연히 조건에 맞지 않기때문에 boolean형 변수값이 달라지겠지요...
for문에서 빠져나와야하는 순간에는 break를 이용해서 빠져나가 주셔야 합니다.
저번 답변에 적어드린 코드를 보시면 break 문을 적어놓은걸 확인할수 있을겁니다.
break역할을 생각해 보시면서 다시 코드를 살펴보세요.