当我从联系人列表中的地址数据中选择联系人姓名和地址不检索 [英] When I select contact name and address from contact list address data not retrieved

查看:218
本文介绍了当我从联系人列表中的地址数据中选择联系人姓名和地址不检索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在android系统从联系人列表中获取联系人姓名和相关地址。我得到的联系人的姓名和他们的电话号码,但遗憾的是未能获得详细地址。当我选择的联系地址,它会返回null每次。

我搜索谷歌和计算器。但无法找到一个解决方案。当我搜索我发现,详细地址在另一个单独的表,但我搜索到表ID,但并没有从地址表中返回数据。所以,请帮我解决这个问题。由于提前,

请找到code片断我用来获取联系方式,

 包com.contact.contacts;进口的java.util.ArrayList;
进口的java.util.List;进口android.os.Bundle;
进口android.provider.ContactsContract;
进口android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
进口android.app.Activity;
进口android.database.Cursor;
进口android.util.Log;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.ListView;
进口android.widget.AdapterView.OnItemClickListener;公共类MainActivity扩展活动实现OnItemClickListener {    私人的ListView ListView的;
    私人列表< ContactBean>名单=新的ArrayList< ContactBean>();    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        ListView控件=(ListView控件)findViewById(R.id.list);
        listView.setOnItemClickListener(本);        光标cur_phone = getContentResolver()查询(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,NULL,NULL,
                NULL,NULL);
        而(cur_phone.moveToNext()){            字符串名称= cur_phone
                    .getString(cur_phone
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));            字符串phoneNumber的= cur_phone
                    .getString(cur_phone
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));            字符串ID = cur_phone.getString(cur_phone
                    .getColumnIndex(ContactsContract.Contacts._ID));            的System.out.println(光标大小:联系人姓名:+姓名);
            的System.out.println(光标大小:联系号码:+ phoneNumber的);
            的System.out.println(光标大小:ID:+身份证);        光标cursor_address = getContentResolver()查询(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,NULL,NULL,NULL,NULL);
        cursor_address.close();        //获取数据包containg邮政信息联系人
        cursor_address = getContentResolver()查询(ContactsContract.Data.CONTENT_URI,
            新的String [] {StructuredPostal.STREET,
                StructuredPostal.CITY,
                StructuredPostal.POST code},
                ContactsContract.Data.CONTACT_ID +=?和+
                    StructuredPostal.MIMETYPE +=?,
                新的String [] {将String.valueOf(ID),StructuredPostal.CONTENT_ITEM_TYPE},
                空值);        cursor_address.moveToFirst();
        的System.out.println(光标大小:外而);        而(cursor_address.moveToNext()){
            的System.out.println(光标大小:内部而);
            //这个while语句不运行        如果(cursor_address = NULL&放大器;!&安培; cursor_address.moveToFirst())
        {
            如果(cursor_address.getCount()大于0){
                字符串街= cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.STREET));
                的System.out.println(地址+街);
                后弦code = cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.POST code));
                串市= cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.CITY));
            }
            其他
            {
                的System.out.println(光标是:+ cursor_address);
                Log.i(联系人,光标+ cursor_address);
            }
        }
        其他
        {
            的System.out.println(光标空:+ cursor_address);
            Log.i(接触应用,光标空+ cursor_address);
        }
        }
        }
    }    @覆盖
    公共无效onItemClick(适配器视图<>为arg0,ARG1观,诠释ARG2,长ARG3){
        // TODO自动生成方法存根    }}


解决方案

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

 包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.ContactsContract;
进口android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.ImageView;
进口android.widget.ListView;
进口android.widget.Toast;公共类MainActivity扩展活动实现OnItemClickListener {    私人的ListView ListView的;
    私人列表< ContactBean>名单=新的ArrayList< ContactBean>();    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        ListView控件=(ListView控件)findViewById(R.id.list);
        listView.setOnItemClickListener(本);
        ContentResolver的CR = getContentResolver();
        光标CUR = cr.query(ContactsContract.Contacts.CONTENT_URI,
                NULL,NULL,NULL,NULL);
        如果(cur.getCount()大于0){
        而(cur.moveToNext()){
            字符串ID = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
        字符串名称= cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));        字符串手机= NULL;
        字符串POBOX = NULL;
        串街道= NULL;
        字符串城市= NULL;
        字符串状态= NULL;
        字符串邮政code = NULL;
        字符串全国= NULL;        如果(的Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))大于0){
            //查询的电话
            光标pCur = cr.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    空值,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +=?,
                    新的String [] {ID},NULL);
                    而(pCur.moveToNext()){
                    //获取电话号码
                        手机= pCur.getString(
                                pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    }
                    pCur.close();            }        字符串addrWhere = ContactsContract.Data.CONTACT_ID += AND+ ContactsContract.Data.MIMETYPE +=;
        的String [] = addrWhereParams新的String [] {ID,
            ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};
        光标addrCur = cr.query(ContactsContract.Data.CONTENT_URI,
                    空,addrWhere,addrWhereParams,NULL);
        而(addrCur.moveToNext()){
            POBOX = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
            街道= addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
            城市= addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
            状态= addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
            邮政code = addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POST code));
            国家= addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
            字符串类型= addrCur.getString(
                         addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
        }
        addrCur.close();        ContactBean objContact =新ContactBean();
        objContact.setName(名);
        objContact.setPhoneNo(电话);        objContact.setAddressLine1(POBOX);
        objContact.setAddressLine2(街道);
        objContact.setCity(市);
        objContact.setPostal code(邮政code);
        objContact.setCountry(国家);
        list.add(objContact);        ContactAdapter objAdapter =新ContactAdapter(ContactActivity.this,
                R.layout.single_contact,清单);
        listView.setAdapter(objAdapter);        如果(空=名单和放大器;!&安培;!则为list.size()= 0){
            Collections.sort(名单,新的比较< ContactBean>(){                @覆盖
                公众诠释比较(ContactBean LHS,RHS ContactBean){
                    返回lhs.getName()的compareTo(rhs.getName())。
                }
            });        }其他{
            showToast(不接触找到!!!);
        }
    }        }
    }    私人无效showToast(弦乐味精){
        Toast.makeText(这一点,味精,Toast.LENGTH_SHORT).show();
    }    @覆盖
    公共无效onItemClick(适配器视图<>列表视图,视图V,INT位置,
            长ID){
        //事件项目点击
    }
}

I need to get contact name and relevant address from contact list in android. I get the contact name and their phone number, but unfortunately unable to get the address details. When I select the contact address, it will return null every time.

I searched the google as well as stackoverflow. But unable to find a solution. When I searched I found that, address details are in another separate table, but I searched that table with id, but didn't return the data from the address table. So please help me to solve this problem. Thanks in advance,

Please find the code snippet which I used to get the contact details,

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

    }

}

解决方案

Finally I solve the problem, Please find the below answer,

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
    }
}

这篇关于当我从联系人列表中的地址数据中选择联系人姓名和地址不检索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆