做一个安卓实验,读取通讯录并添加联系人。在添加联系人的时候,发现添加的联系人信息是空的!

做一个安卓实验,读取通讯录并添加联系人。在添加联系人的时候,发现添加的联系人信息是空的图片说明
图片说明

 public class AddContactActivity extends AppCompatActivity {
    private EditText nameEdit;
    private EditText phonenumberEdit;
    private Button add;
    private Toolbar toolbar;

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

        nameEdit = (EditText) findViewById(R.id.name);
        phonenumberEdit = (EditText) findViewById(R.id.phonenumber);
        add = (Button) findViewById(R.id.add);
        toolbar = (Toolbar) findViewById(R.id.toolbar_addcontact);

        //Toolbar
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        add.setOnClickListener(new View.OnClickListener() {
            String name = nameEdit.getText().toString().trim();
            String phonenumber = phonenumberEdit.getText().toString();

            @Override
            public void onClick(View v) {
                ContentResolver resolver = getContentResolver();
                Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
                Uri datauri = Uri.parse("content://com.android.contacts/data");
                Cursor cursor = resolver.query(uri, null, null, null, null);
                int count = cursor.getCount();
                ContentValues values = new ContentValues();
                int contact_id = count + 1;
                values.put("contact_id", contact_id);
                resolver.insert(uri, values);
                //插入具体的数据到data表,数据类型,data1具体的数据
                ContentValues namevalue = new ContentValues();
                namevalue.put("mimetype", "vnd.android.cursor.item/name"); // 指定数据类型
                namevalue.put("data1", name);
                namevalue.put("raw_contact_id", contact_id); // 一定要记得指定数据属于哪个联系人
                resolver.insert(datauri, namevalue);

                ContentValues phonevalue = new ContentValues();
                phonevalue.put("mimetype", "vnd.android.cursor.item/phone_v2");
                phonevalue.put("data1",phonenumber);
                phonevalue.put("raw_contact_id", contact_id);
                resolver.insert(datauri, phonevalue);

                Toast.makeText(AddContactActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
            }
        });
    }


}

但是把上面要添加的联系人信息由从EditText中读取改为直接给定时,发现联系人信息可以添加了
图片说明
图片说明

 public class AddContactActivity extends AppCompatActivity {
    private EditText nameEdit;
    private EditText phonenumberEdit;
    private Button add;
    private Toolbar toolbar;

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

        nameEdit = (EditText) findViewById(R.id.name);
        phonenumberEdit = (EditText) findViewById(R.id.phonenumber);
        add = (Button) findViewById(R.id.add);
        toolbar = (Toolbar) findViewById(R.id.toolbar_addcontact);

        //Toolbar
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        add.setOnClickListener(new View.OnClickListener() {
            String name = nameEdit.getText().toString().trim();
            String phonenumber = phonenumberEdit.getText().toString();

            @Override
            public void onClick(View v) {
                ContentResolver resolver = getContentResolver();
                Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
                Uri datauri = Uri.parse("content://com.android.contacts/data");
                Cursor cursor = resolver.query(uri, null, null, null, null);
                int count = cursor.getCount();
                ContentValues values = new ContentValues();
                int contact_id = count + 1;
                values.put("contact_id", contact_id);
                resolver.insert(uri, values);
                //插入具体的数据到data表,数据类型,data1具体的数据
                ContentValues namevalue = new ContentValues();
                namevalue.put("mimetype", "vnd.android.cursor.item/name"); // 指定数据类型
                namevalue.put("data1", "Android");
                namevalue.put("raw_contact_id", contact_id); // 一定要记得指定数据属于哪个联系人
                resolver.insert(datauri, namevalue);

                ContentValues phonevalue = new ContentValues();
                phonevalue.put("mimetype", "vnd.android.cursor.item/phone_v2");
                phonevalue.put("data1","1234567890");
                phonevalue.put("raw_contact_id", contact_id);
                resolver.insert(datauri, phonevalue);

                Toast.makeText(AddContactActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
            }
        });
    }


}

不明白为什么,求大佬解答啊

0

2个回答

public void testAddContact() throws Exception{
    Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
    ContentResolver resolver = this.getContentResolver();
    ContentValues values = new ContentValues();
    long contactid = ContentUris.parseId(resolver.insert(uri, values));

    uri = Uri.parse("content://com.android.contacts/data");

    //添加姓名
    values.put("raw_contact_id", contactid);
    values.put(ContactsContract.Contacts.Data.MIMETYPE, "vnd.android.cursor.item/name");
    values.put("data1", nameEdit.getText().toString());
    resolver.insert(uri, values);
    values.clear();

    //添加电话
    values.put("raw_contact_id", contactid);
    values.put(ContactsContract.Contacts.Data.MIMETYPE, "vnd.android.cursor.item/phone_v2");
    values.put("data1", phonenumberEdit.getText().toString());
    resolver.insert(uri, values);
    values.clear();

}

    你的代码太乱了,这个亲测可用,问题你对比一下
1

图片说明
图片对比,你的问题应该就是contactid 的问题,改一个contactid 就好了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android向通讯录添加联系人的一般方法
 Android向通讯录添加联系人的一般方法 以一个简单的例子加以说明,记得需要相应的权限: 测试代码,关键的内容就在add函数里面。 package zhangphil.demo; import android.app.Activity; import android.content.ContentUris; import android.content.
android 向系统通讯录添加一个联系人信息
方法一:直接跳转到系统的新建联系人页面 public void addContact() { Intent intent = new Intent(Intent.ACTION_INSERT); intent.setType("vnd.android.cursor.dir/person"); intent.setType("vnd.android.c
基于Android studio的手机联系人信息获取
最近需要做到这么一个功能,获取联系人信息,并且将联系人姓名和电话显示到屏幕上,上网查了很多资料,折腾了很久才做出来,特此写下感想。代码原理不多讲,度娘一大堆,在贴代码之前想说一下过程中容易忽略的地方:1.添加运行时权限,很多时候我们往往只在清单里面添加如下权限,然而在android6之后需要添加运行时权限,否则照样无法运行。<uses-permission android:name="and...
Android四大组件之一ContentProvider实现简单的联系人读取
概要:ContentProvider:又名内容提供者。通过它,可以实现不同应用之间的数据共享,举个栗子;在我的小米手机系统里有这样两个程序:第一个程序叫”电话“,这个电话应用程序就是一个内容提供程序,它里面有相关类继承ContentProvider,并注册了provider成为内容提供者,比如说,在“电话”这个应用里,某个类继承ContentProvider,然后实现ContentProvider...
Android--读取通讯录并添加联系人
1.加入读写权限 Xhtml代码 uses-permission android:name="android.permission.READ_CONTACTS" />  uses-permission android:name="android.permission.WRITE_CONTACTS" />   联系人信息Uri: content://com.an
Android手机通讯录的读取、添加、删除、查找
Android联系人数据库文件(contact2.db) 有研究过手机通讯录数据的童鞋肯定知道一个数据库文件:目前是contact2.db(哥的手机是Android4.04的) 在此路径下可以找到:/data/data/com.android.providers.contacts/databases/contact2.db 将其导入可视化数据库管理器当中(我这里用的是SQ
Android 调用系统联系人界面的添加联系人,添加已有联系人,编辑和修改。
一、添加联系人 Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("content://com.android.contacts"), "contacts")); addIntent.setType("vnd.android.cursor.dir/pe
Android 调用系统联系人界面(添加联系人,添加已有联系人,编辑和修改)
https://www.jb51.net/article/107728.htm
64.内容提供者ContentProvider--获取系统的联系人,插入联系人
系统的联系人在data/data文件夹的com.android.providers.contacts包的contacts2.db文件中,了解系统的联系人需要3个数据库 raw_contacts表:每一个联系人都有一条数据,contact_id:联系人id和display_name:联系人的名字,例如下面有3个联系人,姓名分别在下面圈中所示 data表:存放联系人的详细信息,每一行存放一个联...
Android软件开发之通讯录——添加联系人以及SQLite工具的简单使用
关于通讯录获取联系人信息以及联系人信息的存储结构,下面链接的博客的博主已经简单说明: http://blog.csdn.net/snwrking/article/detail/7601794 ------------------------------------------------------------------------------------------------------
Android 手机通讯录开发时给联系人添加头像失败的坑
在给联系人添加头像代码Bitmap photo = ...; // 将 Bitmap 转为 byte[] byte[] bytes = LshImageUtils.bitmap2Bytes(photo); // 添加联系人, 插入名字和头像 (LshContactsEditor 为本人封装的编辑联系人的工具类) LshContactsEditor editor = new LshContactsEd
基于android studio的读取联系人并可点击拨打电话
基于android studio的联系人读取及电话拨打,参考了《第一行代码》的思路
Android 内容提供者之读取联系人案例
ContentProvider是不同应用程序之间进行数据交换的标准API,以Uri形式对外提供数据,允许其他应用操作本应用数据。其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据 布局文件     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:to
Android studio 获取手机联系人和号码并输出
初学Android studio 需要做一个功能,获取联系人信息、并将联系人的名字,号码输出到显示屏上。 使用Android studio版本:3.2  JDK版本: jdk1.8.0_151   首先在清单文件添加权限,获取联系人读写权限 <uses-permission android:name="android.permission.WRITE_CONTACTS"/> &...
Android访问通讯录和添加联系人
Android中通讯录使用ContentProvider实现 Android中通讯录界面是使用一个App 存储内容使用的是另一个App 需要的权限: 还有junit单元测试的权限等配置,这里不写了。 单元测试类: package com.example.test; import java.util.ArrayList; import android.con
Android读取系统联系人权限
提前在模拟器添加联系人 直接在手机上运行的可以不用 新建一个项目,完成后,开始设置布局,在布局里面添加listview id设置为contactsview 在MainActivity里添加listview控件 <ListView android:id="@+id/contacts_view" android:layout_width="match_pa...
Android跳转到系统通讯录新增和修改联系人
新增联系人: Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI); intent.putExtra(android.provider.ContactsContract.Intents.Insert.NAME, name); intent.putExtra(android
Android通讯录联系人的读取、更新、插入、删除等方法
TestContacts.java: package waga.android.study.TestContacts; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.data
Android读取联系人信息(姓名,电话,地址,邮箱,生日等)
最近尝试了一下拉取手机通讯录中所有联系人的姓名,手机号码,地址,公司,邮箱等信息,在此做点小笔记,有需要的时候可以直接拿过来用,好了下面看看代码吧: public void testGetAllContact() throws Throwable { //获取联系人信息的Uri Uri uri = ContactsContract.Contacts.CONTENT_U
安卓通过ContentResolver添加联系人
通过ContentResolver添加联系人 效果如下: 代码: package com.javen.devicemange.CrazyOne.content; import android.content.ContentUris; import android.content.ContentValues; import android.net.Uri; import androi
Android中使用Content Provider组件访问通讯录中的联系人和添加联系人案例详解
Android中使用Content Provider组件访问通讯录中的联系人和添加联系人案例详解!
Android联系人列表实现
演示汉字转拼音String pinyingStr = PinyinHelper.getShortPinyin( String.valueOf(charSequence).toLowerCase().trim());获取分组Key(A,B,C….#) @Nullable private String getPingyingKey(Stri
在联系人APP中的“新增/修改联系人”界面增加一个保存button
     在进行宇朔医疗项目的开发过程中,客户反映,在电话联系人界面,编辑或者新增联系人时,没有保存按钮。当编辑好联系人时,点击退出按钮,APP自动保存联系人。但是这样并不方便,为了让用户能够有良好的使用体验,在电话联系人APP中添加了一个保存联系人的button(按钮)添加之前: 添加之后: 平台:mt8735 Android5.1解决步骤:1. 需要在右上角显示一个“保存”字样,用PS制作一张...
安卓——读取到手机通讯录中的好友的备注信息
奇葩需求 - 读取到手机通讯录中的好友的备注信息
Android 内置群组,联系人
这样一个需求,手机第一次启动的时候,需要内置一个群组,并且里面有给定的联系人信息,本来打算写双进程守护的,结果昨天接到一个这样的任务,就先把它做了,发现里面有些操作数据库的东西还是值得看一下。首先接到这样一个需求第一眼就是懵逼,然后还是得硬着头皮搞,接下来分析下这个需求需要怎么搞:1、首先第一次启动 Android 有一个开机启动的广播; 2、启动后去内置一个群组; 3、内置客户给的联系人;
如何向android手机通讯录中添加联系人
直接在手机的通讯录的数据库中添加列表 相关代码如下 package com.example.test; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.os.RemoteException; import android.view.Menu; import ...
自定义listview读取手机联系人信息
我以手机联系人为例来说明该自定义listview,图片和文字共存。 实现效果如图: 下面是我的思路:main.xml这个xml很简单,只有一个listview控件。<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.co
android 跳转到通讯录并获取展示到页面 及android联系人信息获取
一  :android 跳转到通讯录并获取展示到页面 大致思路; 1.点击跳转到通讯录界面  2.获取通讯录姓名和手机号码  3.回调展示拿过来的姓名和手机号码  (一)跳转界面 public void jumpSystemContacts(View view){ Uri uri = Uri.parse("content://Contacts/people"
Android 添加联系人发短信以及打电话功能实现
1.Android添加联系人功能的实现 先看下功能演示图:                                                         由于代码比较多不在此贴出,项目下载地址:点击下载源码 2.Android发送短信功能实现   private void sendSMS(String phoneNumber,String msg
从通讯录中导入联系人并去重
首先给出实现完的界面图 上面是给出来的实现结果图。 从本地联系人中导出联系人,需要使用ContentProvider来获取通讯录中的联系人。 从通讯录中获取联系人方法如下: /** 得到手机通讯录联系人信息 **/ private void getPhoneContacts() { ContentResolver resolver = ContactsAct
Android通讯录之分组联系人
Android系统联系人信息通过 ContentProvider提供给我们使用,具体请参看contacts2.db 一、获取所有的分组信息 [java] view plain copy /**       * 获取所有的 联系人分组信息       *        * @return       */       public List
android ContentResolver的使用(获取和修改联系人信息demo)
ContentProvider和ContentResolver永远是相对的,本章主要是讲ContentResolver的使用,当然是在android系统提供ContentProvider的情况下。 ContentProvider与ContentResolver概念上的东西的就不讲了,主要讲一下ContentResolver的作用以及使用方法。   ContentResolver的作用: 1、...
Android 手机通讯录修改联系人失败的坑
一般我们添加联系人的时候,是通过查询 raw_contacts 表的 _id 字段,获取最末尾的 _id 值 +1 便是该表中需要添加的 contact_id 值。一般情况下,contact_id 的值应该和 _id 的值是相等的。但是在第三方应该的大量增删改查下,会出现 contact_id 和 _id 不相等的情况。也就是说,即使你在代码中存入的 contact_id 为当前的 _id
Android学习之调用系统联系人页面返回联系人信息
Android学习之调用系统联系人页面返回联系人信息
安卓选择通讯录联系人和获取全部联系人
点击电话按钮,进入到手机通讯录,直接选择联系人,将手机号码带回。 读取联系人,所以申请权限 点击电话按钮跳转 startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), 0);实现获取号码 @Override
android studio之读取系统联系人
1.我们想实现这个功能,我们要先了解一些事情: a.很明显,我们要从另一个app中读取一些资料,很明显我们要用到一些工具,ContentResolver就是我们要用到的工具.b.而这个东西的CRUD和一个叫内容uri的东西关系十分密切,所谓uri就是给我们的数据设置唯一标识,这样我们就可以根据这个uri找到某一项数据而不会出差错,而这个uri通常是如何命名的呢,具体分为2部分,authority和...
android中从手机添加联系人,如何避免重复添加的代码的问题
ContentResolver reContentResolverol = this.getContentResolver(); // URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集 Uri contactData = data.getData(); // 查询就是输入URI等参数,其中URI是必须的,其他是可选的,如果系统能找到
Android开发系列(十一):对手机通讯录的读取、添加、删除、查找
Android应用对通讯录的访问
Android通讯录的管理(联系人的增删改查)
Android中的联系人存储是通过ContentProvider实现的。因此APP对系统通讯录进行操作涉及到ContentProvider接口的使用。通讯录存储常用的数据库表使用有关接口前,首先了解一下通讯录数据库中常用的数据库表: 表名 表用途 contacts 联系人表,存储了实际的联系人姓名,头像,最后通话时间等信息。\n会对实际的联系人数据进行一定去重。 raw_
Android:打开系统联系人界面并获取数据
在Android应用程序的开发中,经常要实现的一个功能是调用系统自带的联系人界面,做到选择人之后,取得相应的名称和号码,并返回。     android2.0前后实现方式上也有一定的差别:主要是2.0及以上版本联系人API发生了变化,由原来的Contacts变成了ContactsContract。 必须权限: android:name="android.permission.
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java添加学习信息 用数据库添加课程表