2 annbnncnnd AnnBnnCnnD 于 2013.04.09 17:03 提问

从联系人中提取email异常

从一个联系人信息中提取Email

我用了下面的代码:

    Cursor c1;
    c1 = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME);
    if(c1==null)
return;
            if(c1.getCount() > 0)
    {
            while(c1.moveToNext())
            {
                String id = c1.getString(c1.getColumnIndex(Contacts._ID));
                                            if(id==null)
                    continue;
                                            Cursor email_crsr = getContentResolver().query(CommonDataKinds.Email.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
                if(email_crsr!=null)
                      email = phone_crsr.getString(phone_crsr.getColumnIndex(CommonDataKinds.Email.DATA));

 }
}

然后报出如下异常: 04-09 10:38:59.487: E/AndroidRuntime(8150): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 4

2个回答

ce_la_vie
ce_la_vie   2013.04.09 17:41
已采纳

试试:

public ArrayList<String> getNameEmailDetails(){
    ArrayList<String> names = new ArrayList<String>();
    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));
            Cursor cur1 = cr.query( 
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                            new String[]{id}, null); 
            while (cur1.moveToNext()) { 
                //to get the contact names
                String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
//                    Log.e("Name :", name);
                    String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
//                    Log.e("Email", email);
                    if(email!=null){
                        names.add(email);
                    }
                } 
                cur1.close();
            }
        }
        return names;
    }
baimy1985
baimy1985   2013.04.09 21:54
phone_crsr 这个在哪初始化和赋值的,写错了吧,同时也没有移动cursor的动作。
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
提取Email地址
目的:C#通过正则表达式提取html中的Email,欢迎大家下载,有问题交流沟通!
PPC用短信群发软件原代码
可以在PPC上群发短信,并可以从系统联系人中选择发送目标
android短信连发器
向指定号码重复发送一条短信,可以从联系人中取号码。
U960S中提取的EMAIL客户端
从U960S 2.3.7官方ROM中提取的EMAIL客户端
从一段字符提取手机号码、email、url等信息代码
从一段字符提取手机号码、email、url等信息代码
Android 全局异常捕获后台发送邮件
网上找了很多资料都不能使用,后来自己参考写了这么一个 全局异常捕获并通过后台给指定的QQ邮箱发送 异常报告日志附件. 重点位置都已经注释了,其他的大家慢慢理解吧。 注意:QQ邮箱设置服务和生成授权码,AndroidManifest权限,MyApplication设置和初始化。和QQ邮箱帐号的格式。 其他没什么了,理论上换个正常的QQ就可以直接发送邮件了 这个dome是从自己项目中提取出来的,肯定能成功
Android实现类似微信联系人中的分组列表的例子
Android实现类似微信联系人中的分组列表。
编写一个程序,要求用户输入邮件地址,Email地址必须符合规范。
编写一个程序,要求用户输入邮件地址,Email地址必须符合规范。编写一个邮件地址格式不符合规范的自定义异常继承自ApplicationException,如果邮件地址格式不符合规范,则抛出这个异常。
email抓取器
email地址抓取,可以从网页或文件中直接提取,很好用啊。
w3cSchool中文网中提取的chm格式教程
本人中 http://www.w3cschool.cn/ 中提取全部结点并制作的 chm 格式离线教程。