listview-请教大家,希望读取出来的联系人信息(名字和电话号码)能够在ListView 中 显示

问题描述

请教大家,希望读取出来的联系人信息(名字和电话号码)能够在ListView 中 显示

将读取的联系人信息在ListView中显示,但是不知道代码哪里出错了,始终无法显示,请大家指教,谢谢
activity_main

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.IWIN.providertext.MainActivity" >

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     />

MainActivity

package com.IWIN.providertext;

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

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

ListView listView;
ArrayAdapter<String> adapter;
List<String> data= new ArrayList<String>();
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView listView=(ListView)findViewById(R.id.listView);

    adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,data);
    listView.setAdapter(adapter);
    readData();
}
public void readData(){
    Cursor cursor=null;
    try{
         cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        if(cursor.moveToFirst()){
            do{
                String DisplayName=cursor.getString(cursor.getColumnIndex("ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME"));
                int number=cursor.getInt(cursor.getColumnIndex("ContactsContract.CommonDataKinds.Phone.NUMBER"));
                data.add(DisplayName+"n"+number);
            }while(cursor.moveToNext());
        }
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        if(cursor!=null){
            cursor.close();
        }
    }
}

}

LogCat显示的是:
09-28 12:11:59.308: E/Cursor(675): requesting column name with table name -- ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
09-28 12:11:59.308: E/Cursor(675): java.lang.Exception
09-28 12:11:59.308: E/Cursor(675): at android.database.AbstractCursor.getColumnIndex(AbstractCursor.java:243)
09-28 12:11:59.308: E/Cursor(675): at com.IWIN.providertext.MainActivity.readData(MainActivity.java:35)
09-28 12:11:59.308: E/Cursor(675): at com.IWIN.providertext.MainActivity.onCreate(MainActivity.java:27)
09-28 12:11:59.308: E/Cursor(675): at android.app.Activity.performCreate(Activity.java:4466)
09-28 12:11:59.308: E/Cursor(675): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)

解决方案

http://www.cnblogs.com/sunjialiang/archive/2011/08/17/2142794.html

解决方案二:

参考:
http://blog.csdn.net/snwrking/article/details/7601794

解决方案三:

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

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

ArrayAdapter<String> adapter;
List<String> data = new ArrayList<String>();

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

    ListView listView = (ListView) findViewById(R.id.listView);
    readData();// 放在这里
    adapter = new ArrayAdapter<String>(MainActivity.this,
            android.R.layout.simple_list_item_1, data);
    listView.setAdapter(adapter);

}

public void readData() {
    Cursor cursor = null;
    try {
        cursor = getContentResolver().query(Contacts.CONTENT_URI, null,
                null, null, null);

        if (cursor != null) {
            while (cursor.moveToNext()) {

                String displayName = cursor.getString(cursor
                        .getColumnIndex(Contacts.DISPLAY_NAME));
                String contactId = cursor.getString(cursor
                        .getColumnIndex(Contacts._ID));
                Cursor phones = getContentResolver().query(
                        Phone.CONTENT_URI, null,
                        Phone.CONTACT_ID + " = " + contactId, null, null);
                phones.moveToNext();
                String phoneNumber = phones.getString(phones
                        .getColumnIndex(Phone.NUMBER));
                data.add(displayName+"n"+phoneNumber);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

}

时间: 2025-01-30 14:28:12

listview-请教大家,希望读取出来的联系人信息(名字和电话号码)能够在ListView 中 显示的相关文章

android 调用系统的添加联系人界面,如何获得添加的联系人的名字或者电话号码?

问题描述 android 调用系统的添加联系人界面,如何获得添加的联系人的名字或者电话号码? 如题,请问我怎么样才能获得返回结果呢?意思就是我要添加联系人,并在保存的时候知道这个联系人的号码和姓名? 我调用startActivityForResult data直接返回null,resultCode 都不对,返回0,请问我该怎么写才能获得返回的结果? 解决方案 http://blog.csdn.net/snwrking/article/details/7601794 解决方案二: 跳转之前,在in

contacts-如何从数据库中读取联系人信息?

问题描述 如何从数据库中读取联系人信息? 我想读取所有的联系人信息到 PhoneBookBean 中.PhoneBookBean 包含first_name lastname email_address,但是看起来很难读取 People.URL.使用 ContactsContract,需要 mime_type,并且必须提供 lookupKey,我需要迭代所有的联系人一个一个人输入.如何从数据库中读取联系人信息? 解决方案 解决方案: Intent intent = new Intent(Inten

android实现读取、搜索联系人的代码_Android

代码很简单,就不多废话了 复制代码 代码如下: //读取联系人 public static Uri CONTACTSURI = ContactsContract.Contacts.CONTENT_URI;//联系人     public static void getContactsInfo(Context context,String tag){         String[] projections = new String[]{ContactsContract.Contacts._ID,

android实现读取、搜索联系人的代码

代码很简单,就不多废话了 复制代码 代码如下: //读取联系人 public static Uri CONTACTSURI = ContactsContract.Contacts.CONTENT_URI;//联系人     public static void getContactsInfo(Context context,String tag){         String[] projections = new String[]{ContactsContract.Contacts._ID,

iOS访问通讯录开发:读取联系人信息

iOS读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值 属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图 片数据. 开发:读取联系人信息-"> 本案例是从iOS设备上读取通讯 录中的联系人,并将其显示在一个表视图中,可以进行查询,点击联系人进入详细信息画面.访问通讯录的应 用必须要做的两件事情: 1.添加AddressBook和AddressBookUI框架 为工程添加 AddressBook.fra

sqlite-android读取手机联系人并在textview中显示名字时中文乱码怎么解决?

问题描述 android读取手机联系人并在textview中显示名字时中文乱码怎么解决? android读取手机联系人并在textview中显示名字时中文乱码怎么解决?从数据库里来的中文的全变成"?"了,其他的正常. 解决方案 new String(lCursor.getBlob(indexName), "UTF-8").replace("", "").replace("r", "");

iOS访问通讯录开发-读取联系人信息

读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案例是从iOS设备上读取通讯录中的联系人,并将其显示在一个表视图中,可以进行查询,点击联系人进入详细信息画面.访问通讯录的应用必须要做的两件事情: 1.添加AddressBook和AddressBookUI框架 为工程添加AddressBook.framework和AddressBookUI.fram

android怎么在listview中显示联系人 我的代码错在哪里??

问题描述 android怎么在listview中显示联系人 我的代码错在哪里?? package com.example.maysisteen; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.R.anim; import android.app.Activity; import android.content.ContentValues; import and

android-小白请教高手问题,今天看了持久化技术的关于一个从文件中读取数据的问题

问题描述 小白请教高手问题,今天看了持久化技术的关于一个从文件中读取数据的问题 想要完成一个功能,向EditText里输入数据,数据存放在一个文件夹后,然后按下back键,再重新启动这个程序,再从这个文件里读取数据,出现的是这个数据已经填充在EditText里 下面是代码 MainActivity import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import