Android 联系人列表获取地址

Posted

技术标签:

【中文标题】Android 联系人列表获取地址【英文标题】:Android contact list get address 【发布时间】:2012-11-26 12:01:09 【问题描述】:

在我的应用程序 (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));

但是当我尝试执行这个时,我得到一个错误:

"从有 1 行 29 列的 CursorWindow 读取第 0 行第 -1 列失败。 "

我在这里做错了什么?为什么他没有找到城市列?

【问题讨论】:

光标中没有名为ContactsContract.CommonDataKinds.StructuredPostal.CITY的列 那么获取地址的“Mimetype”是什么? “ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS”也不起作用,虽然它似乎在这里工作:link 尝试使用该链接中的 Thorstenvv 答案 【参考方案1】:

好的,解决了,有一些愚蠢的错误...... 这是工作代码:

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();
                    
                
            

【讨论】:

以上是关于Android 联系人列表获取地址的主要内容,如果未能解决你的问题,请参考以下文章

Android带索引联系人列表

当我从未检索到的联系人列表地址数据中选择联系人姓名和地址时

在 Android 中高效处理动态列表视图项

Android 获取联系人列表未在 Android 10 中显示

获取android联系人电话号码列表

如何从 Android 中的联系人列表中获取联系人?使用联系提供商