真机测试没有电话卡如何添加联系人?

真机测试没有电话卡如何添加联系人?

我用的真机测试,但是没有电话卡,按照老师讲的步骤添加完成以后,当再次点击读取的时候应用停止了。

case R.id.add_contacts:
    String contacts_name=name.getText().toString();
    String contacts_number=number.getText().toString();
    ContentValues values=new ContentValues();
    //插入空数据,得到id
    Uri uri1=resolver.insert(ContactsContract.RawContacts.CONTENT_URI,values);
    long id= ContentUris.parseId(uri1);
    //插入姓名
    values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,contacts_name);
    values.put(ContactsContract.Data.RAW_CONTACT_ID,id);
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
    resolver.insert(ContactsContract.Data.CONTENT_URI,values);
    //插入号码
    values.clear();
    values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,contacts_number);
    values.put(ContactsContract.Data.RAW_CONTACT_ID,id);
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
    values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
    resolver.insert(ContactsContract.Data.CONTENT_URI,values);
    Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
    Log.v("insert","新增联系人:"+contacts_name+",号码:"+contacts_number);
    break;

toast和log都打印出来了,但是如果再读取联系人,就会读取报错。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
提问者 D许咚 2019-04-28 10:37:25
  • 空指针异常了,MainActivity的第58行,Cursor为空了吧?你先判断一下,再moveToNext()
    2019-04-28 15:55:50
提问者 D许咚 2019-04-28 10:30:41

问题补充:同时我发现手机里面联系人里面是出现了刚添加的联系人的,重新连接应用点击读取也能读取出来添加的人,但是再执行--》添加-》读取,就会再次报错。

我怀疑是因为添加到的位置的问题,但不敢确定。

另外,读取的代码如下:

case R.id.read_contacts:
    Cursor c1=resolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);

    while(c1.moveToNext()){
        String name;
        String id;
        name=c1.getString(c1.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        id=c1.getString(c1.getColumnIndex(ContactsContract.Contacts._ID));
        //读取联系人名字和id
        Log.i("contacts",name+":"+id);
        String selections= ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?";
        Cursor c2=resolver.query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,selections,new String[]{id},null);
        while (c2.moveToNext()){
            String number=c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            name+=" 号码:"+number;
        }
        Log.v("contacts",name);
    }
    break;


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师