2011-08-13 1 views
0

나는 Location Texter이라는 안드로이드 앱을 만들었습니다. 연락처를 조회하고 싶을 때부터 전화 번호가있는 연락처 만 표시되도록하는 것이 좋습니다. 현재 모든 연락처를 보여줍니다. 그것은 무엇을안드로이드 연락처 (전화 번호 포함)

public void showContacts(Main main, Intent data) { 
    Cursor cursor = main.managedQuery(data.getData(), null, null, null, null); 
    cursor.moveToNext(); 
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

    Cursor phones = main.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 

    while (phones.moveToNext()) { 
     String phoneNo = phones.getString(phones.getColumnIndex(
       ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     main.numbers.add(phoneNo); 
    } 
    main.pickPhoneNos(name); 
    phones.close(); 
} 

모든 연락처와 의도를 열 수 있습니다 : 다음은 코드입니다. 그 중 하나가 선택되면 주요 활동으로 돌아갑니다. 선택한 연락처에 둘 이상의 휴대폰 번호가있는 경우 사용자에게 대화 상자 중 하나를 선택하도록 요청하는 대화 상자가 표시됩니다. 내가 알아챈 것은 대화가 나타나지 않는다는 나의 시도 중 일부입니다. 내가 알고있는 것을 이해하기 힘든 경우 앱을 다운로드하십시오.

답변

0

귀하의 질문에 좀 더 구체적으로 대답해야하며, 귀하가 무엇을 요구하고 있는지 이해하기 어렵습니다. 코드에 몇 가지 문제점이 있습니다.

  1. 당신은 cursorphones 커서에 moveToFirst()를 호출하지 않습니다.
  2. 첫 번째 moveToNext() 호출의 반환 값을 확인하지 않습니다.

이 함수가 없으면 메소드가 중단되고 더 이상 호출이 중단 될 수 있습니다.

+0

이 코드 문제에 대해 놀랄 아닙니다. 연락처를 선택할 때 나는 좋지 않습니다. 내 앱이하는 일은 선택된 연락처로 텍스트를 보냅니다. 현재 (연락처를 찾기 위해) 버튼을 누르면 모든 연락처가 표시됩니다. 하지만 전화 번호가있는 연락처 만 표시하기를 원합니다. –

0

이 추가 :

String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

if (hasPhone.equalsIgnoreCase("1")) 
    hasPhone = "true"; 
else 
    hasPhone = "false" ; 

if (Boolean.parseBoolean(hasPhone)) 
{ 
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" = "+contactId,null, null); 
    while (phones.moveToNext()) 
    { 
    ... 
    } 
    ... 
}