2011-03-02 1 views
3

다음은 내 코드입니다. 실제로 화면에 나와 어떤 연락처도 표시하지 않습니다. 에뮬레이터에는 5 개의 연락처가 추가되었습니다. 어떻게해야할지 말해줘.ListView에서 전화 연락처를 표시하는 방법

{ 
    //some code 
    Cursor cur = getContacts(); 
    String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME}; 
    SimpleCursorAdapter adapter = 
     new SimpleCursorAdapter(this, 
           R.layout.list_view_item_new, 
           cur, 
           fields, 
           new int[] {R.id.contactEntryText}); 
    lv.setAdapter(adapter); 
} 

private Cursor getContacts() { 
    // Run query  
    Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    String[] projection = 
     new String[]{ ContactsContract.Contacts._ID, 
         ContactsContract.Contacts.DISPLAY_NAME }; 
    String selection = null; 
    String[] selectionArgs = null; 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + 
     " COLLATE LOCALIZED ASC"; 
    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 
+0

list_view_item_new의 모습을 보여 주실 수 있습니까? –

+0

그 방향을 가르쳐 주셔서 고마워요. 실제로 저는 선형 레이아웃을 사용하고 있었는데, 그 안에는 textview가 있습니다. 이제 선형 레이아웃을 삭제했습니다. 나는 내 목록을 얻고있다. – Neha

답변

5

어떤 결과가 있는지 확인에 대한 권한을 가지고 작동하는지 확인합니다

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Cursor cur = getContacts(); 

     ListView lv = getListView(); 

     String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME}; 

     SimpleCursorAdapter adapter = 
       new SimpleCursorAdapter(this, 
             R.layout.main, 
             cur, 
             fields, 
             new int[] {R.id.txtbox}); 
      lv.setAdapter(adapter);   
    }  

    private Cursor getContacts() { 
     // Run query  
     Uri uri = ContactsContract.Contacts.CONTENT_URI; 

     String[] projection = 
       new String[]{ ContactsContract.Contacts._ID, 
           ContactsContract.Contacts.DISPLAY_NAME }; 
      String selection = null; 
      String[] selectionArgs = null; 
      String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + 
       " COLLATE LOCALIZED ASC"; 
      return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
    } 

텍스트 뷰 구현에 문제가 있는지 확인하십시오.

+0

전화 번호에 투영되기를 원하는 사람들을 위해. 이 예제를 시도했지만 잘못된 열 데이터를 말하는 오류가 발생했습니다 .1 해결책은 다음과 같습니다. http://stackoverflow.com/questions/21811780/android-contact-phone-number-using-loader-invalid-column-data1 – JPerk

1

처음에는 문제를 좁히기 만했습니다.

1) 읽기 연락처

<uses-permission android:name="android.permission.READ_CONTACTS"/> 

2) 커서 내가 복사 거의 동일한 코드를 실행 한

cur.getCount() 
+1

androidmanifest 파일에이 권한이 있으며 getcount()가 5를 반환하지만 여전히 어댑터에 값이 표시되지 않습니다. 커서의 행 데이터를 검사 할 수있는 방법이 있습니까 ?? 디버깅 할 때 우리가 확인할 수 있다면 체크 할 속성을 알려주시겠습니까 ?? 덕분에 미리 .. – Neha

+0

@neha 언제나 'while (c.moveToNext()) ...'와 같이 커서를 반복 할 수 있지만, 나를 귀찮게하는 것은 하나뿐입니다. 일단 'ContactsContract.Data.DISPLAY_NAME'을 사용하고 'ContactsContract.Contacts.DISPLAY_NAME'을 사용하십시오. 그것들은 같은가요? – wonglik