2012-12-08 2 views
3

주소를 가져 오려면 연락처에서 주소를 검색해야합니다. 내가 이것을 실행하려고 할 때 오류가 발생하는Android 연락처 목록 내 앱 (android 4.0)에

Uri contactData = data.getData(); 
Cursor c = managedQuery(contactData, null, null, null, null); 
    if (c.moveToFirst()) { 
     String city = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));} 

:하지만 내가 여기에 또 다른 게시물에 제공되는 솔루션을 사용

"행 0, 열 -1 ​​일이있는 CursorWindow에서을 읽지 못했습니다 행, 29 열 "

여기서 내가 뭘 잘못하고 있니? 왜 그가 도시 컬럼을 찾지 못했을까요?

+1

더 열이 없습니다 커서의 ContactsContract.CommonDataKinds.StructuredPostal.CITY'라는 이름의 주소 – sinisha

+0

주소를 가져 오는 "Mimetype"은 무엇입니까? "ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS"도 여기서는 작동하지 않지만 작업은하지 않습니다. [link] (http://stackoverflow.com/questions/3609700/get-postal-address-from-a-contact-using -contactscontract-api-on-android? rq = 1) –

+0

해당 링크에서 Thorstenvv 답을 사용해보십시오. – sinisha

답변

3

이 좋아, 바보 같은 실수를, 그것을 해결 가지고 ... 여기 는 작업 코드 :

manifest.xml :

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="androidlab.exercise4_1" 
android:versionCode="1" 
android:versionName="1.0" > 

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

코드 :

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_TYPE); 
startActivityForResult(intent, PICK_CONTACT); 




public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 

    switch (reqCode) { 
     case (PICK_CONTACT) : 
      if (resultCode == Activity.RESULT_OK) { 
       Uri contactData = data.getData(); 
       Cursor c = managedQuery(contactData, null, null, null, null); 
       if (c.moveToFirst()) { 
        try{ 
         //String street = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));//ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)); 
         //String city = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); 
         //String postcode = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); 
         //String country = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); 
         String street = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)); 
        } 
        catch(Exception e){ 
         errorDialog.show(); 
        } 
       } 
      }