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

Android 当我从联系人列表中选择联系人姓名和地址时,未检索地址数据,android,contacts,android-contacts,contactscontract,Android,Contacts,Android Contacts,Contactscontract,我需要从android中的联系人列表中获取联系人姓名和相关地址。我得到了他们的联系人姓名和电话号码,但不幸的是无法得到地址的详细信息。当我选择联系人地址时,每次都会返回null 我搜索了谷歌和stackoverflow。但无法找到解决办法。当我搜索时,我发现地址详细信息在另一个单独的表中,但我用id搜索了该表,但没有从地址表返回数据。所以请帮我解决这个问题。提前感谢, 请找到我用来获取联系方式的代码片段 package com.contact.contacts; import java.uti

我需要从android中的联系人列表中获取联系人姓名和相关地址。我得到了他们的联系人姓名和电话号码,但不幸的是无法得到地址的详细信息。当我选择联系人地址时,每次都会返回null

我搜索了谷歌和stackoverflow。但无法找到解决办法。当我搜索时,我发现地址详细信息在另一个单独的表中,但我用id搜索了该表,但没有从地址表返回数据。所以请帮我解决这个问题。提前感谢,

请找到我用来获取联系方式的代码片段

package com.contact.contacts;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.app.Activity;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity implements OnItemClickListener{

    private ListView listView;
    private List<ContactBean> list = new ArrayList<ContactBean>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listView = (ListView) findViewById(R.id.list);
        listView.setOnItemClickListener(this);

        Cursor cur_phone = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                null, null);
        while (cur_phone.moveToNext()) {

            String name = cur_phone
                    .getString(cur_phone
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

            String phoneNumber = cur_phone
                    .getString(cur_phone
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            String id = cur_phone.getString(cur_phone
                    .getColumnIndex(ContactsContract.Contacts._ID));

            System.out.println("Cursor size : contact Name : "+name);
            System.out.println("Cursor size : contact number : "+phoneNumber);
            System.out.println("Cursor size : id : "+id);

        Cursor cursor_address = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        cursor_address.close();

        // get the data package containg the postal information for the contact
        cursor_address = getContentResolver().query(ContactsContract.Data.CONTENT_URI, 
            new String[]{ StructuredPostal.STREET,
                StructuredPostal.CITY,
                StructuredPostal.POSTCODE},
                ContactsContract.Data.CONTACT_ID + "=? AND " +
                    StructuredPostal.MIMETYPE + "=?",
                new String[]{String.valueOf(id), StructuredPostal.CONTENT_ITEM_TYPE},
                null);

        cursor_address.moveToFirst();
        System.out.println("Cursor size : Outside while");

        while (cursor_address.moveToNext()) {
            System.out.println("Cursor size : Inside while");
            // This while statement is not running

        if(cursor_address != null && cursor_address.moveToFirst())
        {
            if (cursor_address.getCount() > 0) {
                String Street = cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.STREET));
                System.out.println("Address : "+Street);
                String Postcode = cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.POSTCODE));
                String City = cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.CITY));
            }
            else
            {
                System.out.println("Cursor is : " + cursor_address);
                Log.i("Contact : ", "Cursor :" + cursor_address);
            }
        }
        else
        {
            System.out.println("Cursor Null : " + cursor_address);
            Log.i("Contact App : ", "Cursor null" + cursor_address);
        }
        }
        }
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub

    }

}
package com.contact.contacts;
导入java.util.ArrayList;
导入java.util.List;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.provider.ContactsContract.CommonDataTypes.StructuredPostal;
导入android.app.Activity;
导入android.database.Cursor;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ListView;
导入android.widget.AdapterView.OnItemClickListener;
公共类MainActivity扩展活动实现了McClickListener{
私有列表视图列表视图;
私有列表=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView=(listView)findViewById(R.id.list);
setOnItemClickListener(this);
游标cur\u phone=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,null,
空,空);
while(cur_phone.moveToNext()){
字符串名称=当前电话
.getString(当前电话)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME));
字符串phoneNumber=当前电话
.getString(当前电话)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
String id=cur\u phone.getString(cur\u phone
.getColumnIndex(Contacts contract.Contacts._ID));
System.out.println(“光标大小:联系人姓名:“+Name”);
System.out.println(“光标大小:联系人号码:“+phoneNumber”);
System.out.println(“光标大小:id:+id”);
Cursor Cursor\u address=getContentResolver().query(ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,null,null);
光标_地址.close();
//获取包含联系人的邮政信息的数据包
cursor\u address=getContentResolver().query(ContactsContract.Data.CONTENT\u URI,
新字符串[]{StructuredPostal.STREET,
城市结构,
StructuredPostal.POSTCODE},
Contacts contract.Data.CONTACT_ID+“=”和“+
StructuredPostal.MIMETYPE+“=?”,
新字符串[]{String.valueOf(id),StructuredPostal.CONTENT\u ITEM\u TYPE},
无效);
游标地址。moveToFirst();
System.out.println(“光标大小:外部while”);
while(游标\地址.moveToNext()){
System.out.println(“光标大小:内部while”);
//此while语句未运行
if(cursor\u address!=null&&cursor\u address.moveToFirst())
{
if(游标\地址.getCount()>0){
String Street=cursor\u address.getString(cursor\u address.getColumnIndex(StructuredPostal.Street));
系统输出打印号(“地址:+街道”);
String Postcode=cursor\u address.getString(cursor\u address.getColumnIndex(StructuredPostal.Postcode));
String City=cursor\u address.getString(cursor\u address.getColumnIndex(StructuredPostal.City));
}
其他的
{
System.out.println(“光标为:“+光标地址”);
Log.i(“联系人:”、“光标:”+光标地址);
}
}
其他的
{
System.out.println(“游标Null:+游标地址”);
Log.i(“联系人应用程序:”,“光标空值”+光标地址);
}
}
}
}
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
//TODO自动生成的方法存根
}
}
公共阵列列表getName(){
ArrayList mdetail=新的ArrayList();
SQLiteDatabase db=this.getWritableDatabase();
String selectQuery=“SELECT”+表格\详细信息中的列\人员\姓名+;
游标mCursor=db.rawQuery(selectQuery,null);
if(mCursor.moveToFirst()){
做{
mdetail.add(mCursor.getString(mCursor.getColumnIndex(COLUMN_PERSON_NAME));
}while(mCursor.moveToNext());
}
mCursor.close();
db.close();
返回mdetail;
}
如果您的数据成功地添加到数据库中,只需使用此代码从数据库中检索并在列表视图中显示,如下所示。。。。
如果(!db.exists()){
}否则{
mListName=baseManager.getName();
setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,mListName));
}

最后我解决了这个问题,请找到下面的答案

package com.contact.contacts;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnItemClickListener {

    private ListView listView;
    private List<ContactBean> list = new ArrayList<ContactBean>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listView = (ListView) findViewById(R.id.list);
        listView.setOnItemClickListener(this);


        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

        String phone = null;
        String poBox = null;
        String street = null;
        String city = null;
        String state = null;
        String postalCode = null;
        String country = null;

        if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
            //Query for phone 
            Cursor pCur = cr.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                    null, 
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                    new String[]{id}, null);
                    while (pCur.moveToNext()) {
                    // Get the phone number
                        phone = pCur.getString(
                                pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    } 
                    pCur.close();

            }

        String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] addrWhereParams = new String[]{id, 
            ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
        Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, 
                    null, addrWhere, addrWhereParams, null); 
        while(addrCur.moveToNext()) {
            poBox = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
            street = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
            city = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
            state = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
            postalCode = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
            country = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
            String type = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
        } 
        addrCur.close();

        ContactBean objContact = new ContactBean();
        objContact.setName(name);
        objContact.setPhoneNo(phone);

        objContact.setAddressLine1(poBox);
        objContact.setAddressLine2(street);
        objContact.setCity(city);
        objContact.setPostalCode(postalCode);
        objContact.setCountry(country);
        list.add(objContact);

        ContactAdapter objAdapter = new ContactAdapter(ContactActivity.this,
                R.layout.single_contact, list);
        listView.setAdapter(objAdapter);

        if (null != list && list.size() != 0) {
            Collections.sort(list, new Comparator<ContactBean>() {

                @Override
                public int compare(ContactBean lhs, ContactBean rhs) {
                    return lhs.getName().compareTo(rhs.getName());
                }
            });

        } else {
            showToast("No Contact Found!!!");
        }
    }

        }
    }

    private void showToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onItemClick(AdapterView<?> listview, View v, int position,
            long id) {
        // Event for item click
    }
}
package com.contact.contacts;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
导入android.app.Activity;
导入android.content.ContentResolver;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.provider.ContactsContract.CommonDataTypes.StructuredPostal;
导入android.view.view;
导入android.widget.Ad
package com.contact.contacts;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnItemClickListener {

    private ListView listView;
    private List<ContactBean> list = new ArrayList<ContactBean>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listView = (ListView) findViewById(R.id.list);
        listView.setOnItemClickListener(this);


        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

        String phone = null;
        String poBox = null;
        String street = null;
        String city = null;
        String state = null;
        String postalCode = null;
        String country = null;

        if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
            //Query for phone 
            Cursor pCur = cr.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                    null, 
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                    new String[]{id}, null);
                    while (pCur.moveToNext()) {
                    // Get the phone number
                        phone = pCur.getString(
                                pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    } 
                    pCur.close();

            }

        String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] addrWhereParams = new String[]{id, 
            ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
        Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, 
                    null, addrWhere, addrWhereParams, null); 
        while(addrCur.moveToNext()) {
            poBox = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
            street = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
            city = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
            state = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
            postalCode = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
            country = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
            String type = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
        } 
        addrCur.close();

        ContactBean objContact = new ContactBean();
        objContact.setName(name);
        objContact.setPhoneNo(phone);

        objContact.setAddressLine1(poBox);
        objContact.setAddressLine2(street);
        objContact.setCity(city);
        objContact.setPostalCode(postalCode);
        objContact.setCountry(country);
        list.add(objContact);

        ContactAdapter objAdapter = new ContactAdapter(ContactActivity.this,
                R.layout.single_contact, list);
        listView.setAdapter(objAdapter);

        if (null != list && list.size() != 0) {
            Collections.sort(list, new Comparator<ContactBean>() {

                @Override
                public int compare(ContactBean lhs, ContactBean rhs) {
                    return lhs.getName().compareTo(rhs.getName());
                }
            });

        } else {
            showToast("No Contact Found!!!");
        }
    }

        }
    }

    private void showToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onItemClick(AdapterView<?> listview, View v, int position,
            long id) {
        // Event for item click
    }
}