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

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

 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();
            }
        });
    }


}

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

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();

}

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
通讯录添加联系人删除联系人
动态申请权限没加,需要自己加 删除所有联系人时,注意下自己的手机的安卓版本 我这边只有6.0和7.0的手机,发现清理时有些不太一样
9、《通讯录》添加联系人
C语言基础15-16天。其中包括通讯录项目实战。
安卓实现联系人的读取和添加
安卓实现联系人的读取和添加,通过ContentProvider实现 ,简单实现,两个 操作类;
Android--读取通讯录并添加联系人
1.加入读写权限 Xhtml代码 <uses-permissionandroid:name="android.permission.READ_CONTACTS"/> <uses-permissionandroid:name="android.permission.WRITE_CONTACTS"/> ...
添加查询联系人信息
实现手机联系人的添加和查询功能,没有积分的可以去http://blog.csdn.net/c19344881x/article/details/42679795,
读取和添加outlook联系人
读取和添加outlook联系人,Outlook2000 和Outlook2007/2003 类库不一样,本程序可以读取添加,Outlook2003和2007联系人.其他操作对Outlook的操作类似.
联系人信息获取添加
联系人信息获取,两种获取联系人的方式,以及如何添加联系人
添加联系人
1. Android开发如何只获取手机上的联系人而不获取(U)SIM卡上的联系人, 或者使用ContactsContract.Contacts.CONTENT_URI(可同时获取手机与(U)SIM卡联系人)哪个标志为这个联系人是卡上的还是手机上的rn2. 如何向卡上添加联系人rn3. 我使用自定义的方法insertPhone(String name, String num1, String email), 其中内部使用了getContentResolver().insert可往手机上添加联系人, 但我发现如果调用两次即insertPhone("赵钱", "32421421", "aba@163.com");与insertPhone("赵钱a", "32421421", "aba@163.com");则在Android模拟器上显示的是赵钱a, 而进行编辑赵钱a发现里面又含有赵钱与赵钱a, 即两个联系人同时被整合到一个里面去了, 不知道是怎么回事, 下面是insertPhone的源码rn// 通过正常方式添加一个号码rn private boolean insertPhone(String name, String num1, String email) rn rn // 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactIdrn // 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见rn tryrnContentValues values = new ContentValues();rn/*首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactIdrn* RawContacts.CONTENT_URI rn* 源代码:rn* public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "raw_contacts");rn* AUTHORITY_URI: rn* public static final String AUTHORITY = "com.android.contacts";rn* public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);rn*/rnrnrn// values.put(RawContacts.ACCOUNT_TYPE, "");rn// values.put(RawContacts.ACCOUNT_NAME, "");rn rnUri rawContactUri = getContentResolver().insert(rnRawContacts.CONTENT_URI, values);rnlong rawContactId = ContentUris.parseId(rawContactUri);rn rn// 往data表入姓名数据rnvalues.clear();rnvalues.put(Data.RAW_CONTACT_ID, rawContactId);rnvalues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);// 内容类型rnvalues.put(StructuredName.GIVEN_NAME, name);rngetContentResolver().insert(rnandroid.provider.ContactsContract.Data.CONTENT_URI, values);rn rn// 往data表入电话数据, 类型为TYPE_MOBILErnint numType1 = Phone.TYPE_MOBILE;rnvalues.clear();rnvalues.put(Data.RAW_CONTACT_ID, rawContactId);rnvalues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);rnvalues.put(Phone.NUMBER, num1);rnvalues.put(Phone.TYPE, numType1);rngetContentResolver().insert(rnandroid.provider.ContactsContract.Data.CONTENT_URI, values);rn rn// 往data表入Email数据, 类型为TYPE_WORKrnint emailType = Email.TYPE_WORK;rnvalues.clear();rnvalues.put(Data.RAW_CONTACT_ID, rawContactId);rnvalues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);rnvalues.put(Email.DATA, email);rnvalues.put(Email.TYPE, emailType);rngetContentResolver().insert(rnandroid.provider.ContactsContract.Data.CONTENT_URI, values);rnrnreturn true;rn catch(Exception e) rn String strInfo = "";rn strInfo += e.toString();rn rn return false;rn rn rn
Android添加联系人信息并读取
Android添加联系人信息并读取 效果图 题目 1. 创建一个File文件,路径为/mnt/sdcard/temp/zhiyuan.txt 2. 进入主页面后自动从File文件中读取联系人数据,每个item只显示,姓名和电话。如果,你在添加联系人时,填写了备注,那么item的姓名显示成你保存的备注。否则显示姓名。 3.  添加联系人功能,布局最上方有一个添加联系人按钮,下面是L
ssh_crm:联系人添加、联系人列表、联系人修改
联系人添加前台页面设计分析前台页面设计实现:添加选择按钮,使用window.open打开新窗口CustomerAction_list, 携带select=true参数,增加隐藏域携带select,为了点击下一页,等操作时也能显示选择按钮从parameters获取并判断select是否为null, 显示修改删除,否则显示选择按钮为选择按钮添加单击事件触发selectCustomer函数编写selec...
安卓通过ContentResolver添加联系人
通过ContentResolver添加联系人 效果如下: 核心代码 package com.javen.devicemange.CrazyOne.content; import android.content.ContentUris; import android.content.ContentValues; import android.net.Uri; import and...
读取联系人和添加联系人
bean类Contact: import java.util.ArrayList; import java.util.List; public class Contact { private String name; private String email; private String address; private List phone = new Ar
【Contacts】联系人界面添加联系人统计项
题记工作需要在Android6.0的Contacts(联系人模块添加联系人统计项),这里分享下所用的一些知识及解决方案。 知识点 如何添加组件至ListView末尾 如何监听ContentProvider数据库变化 如何进行统计联系人数量 首先介绍下整个设计的思路。由左图效果变为右图的效果(请忽略建立的3个联系人),联系人页面的底部添加一项TextView来显示联系人统计项。随着新建联系人、删除联系
android添加联系人(直接添加到联系人数据库)
[code="java"] 添加联系人姓名、手机、头像。。。 java核心代码 package com.kaka.addContact; import java.io.ByteArrayOutputStream; import android.app.Activity; import android.content.ContentUris; import android.co...
android 联系人添加和查询 联系人群组
答得好 再给100
OutLook的联系人一栏中,添加不进联系人?
系统是Win2000,IE已升级为6.0,仍然添加不进去。从外面导入通讯薄看着是可以导入的,最后显示导入成功的,但是就是看不见联系人这一栏中有联系人!rn请问这是什么原因啊?rn
添加联系人却看不见在联系人名单的问题
今天添加了一个联系人可是却在联系人名单中没有,但是查询这个人还是在的 为什么呢 后来发现 ContentValues contentValues = new ContentValues(); contentValues.put(Contacts.People.NAME, name); Uri contactUri = this.getContentResolver().insert(Con...
MSN添加联系人的问题
今天碰到一个问题,同事的MSN里有一个联系人A添加成功了,但是总是显示脱机,而且不能发消息。rnrn联系人A在其他的机器上均可以看到联机状态,可以发消息。rnrn删除了,重新添加,还是不行。rnrn有没有人碰到过这种情况??
ios-联系人添加.zip
可以添加联系人,特别实用,
内容提供者——添加联系人
(1)MainActivity public class MainActivity extends Activity {     private EditText et_name;     private EditText et_phone;     private EditText et_email;          @Override     protected void
Android添加@联系人功能
Android添加@联系人功能 年后聊天项目加了个@联系人功能的需求,网上找了几个Demo都不尽人意,按照需求需要处理的细节很多觉得稍显繁复,后来想到@功能也就和短信的添加收件人的功能差不多,就自己动手写了一个,这里分享出来给以供参考! 效果图 需求分析@联系人高亮 数据保存和还原 检测用户输入@跳转到联系人选择 @块删除时作为一个整体删除,用户点击时光标不可出现在@块内部 点击@块跳转 思路整
android添加联系人
一个简单的activity,可以往系统表直接添加联系人姓名、邮箱、手机登信息。
outlook无法添加联系人
重新安装系统,导入以前备份的邮件。在已发送邮件里选择一个联系人,右键添加,提示该联系人已经在通讯簿中,无法添加。实际上在通讯簿里没有这个联系人。rnrn谢谢。
20_添加联系人页面布局
本套视频是国内安卓市场自发布应用以来,第一套完整且详细讲解即时通讯类项目的视频。该视频讲解的内容包括但不仅限于用户的注册和登录、添加好友、单聊、邀请信息展示、创建群、群聊和群详情等功能。同时通过手机网络可以发送语音、表情、图片、文字等。该应用可覆盖电商、O2O、互联网金融、在线教育、在线旅游等领域。
添加联系人、地址
adress.c实现了增、删、改、查功能,代码中有非常详细的注释
代码添加联系人
如何代码添加联系人到本地电话簿呢?rn有哪些值是必须的呢?
ios-添加联系人.zip
主要功能:(1)sqlite与tableView结合, (2)搜索功能 (3)拨打电话
添加查询联系人
实现对数据的添加查询,把查询结果显示在列表中,主要实现对数据的查询
J2ME 添加新的联系人
请问一下,一个vcard的字符串 通过J2ME 保存到手机上 ,怎样变成一个联系人在手机上,rn我通过J2ME在手机上写了一个 VCARD 字串,但不知道怎样 作为一个联系人 放到手机上 显示.rnrn我用了JSR75的API 好像不行,是否是文件操作, 还是 手机数据库操作.
添加联系人1.6
final String name = "reader"; // find "reader"'s contact String select = String.format("%s=? AND %s='%s'",         Data.DISPLAY_NAME, Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); String[] project ...
仿qq邮箱的添加联系人
这是一份仿qq邮箱的添加联系人的示例,需要这方面资料的可以看下。
代码实现添加联系人——Vcard
vCard 规范容许公开交换个人数据交换 (Personal Data Interchange PDI) 信息,在传统纸质商业名片可找到这些信息。规范定义电子名片(或叫vCard)的格式。 vCard 规范可作为各种应用或系统之间的交换格式。定义的格式与传送的方法无关。传送交换可能是文件系统,点对点交换的公共电话网络,以有线网络或无线传送的方式。用户能在互联网上直接利用vCard。电子邮件能转发在vCard中人信息。
模拟添加联系人
动态添加EditText 修改activity_add.xml文件,如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/Ll" a
添加联系人号码
通过点击图片按钮,进入联系人列表,选择并返回联系人号码
添加手机联系人信息到特别关心列表或者常用联系人
添加手机联系人信息(头像、姓名、电话)到特别关心列表或者常用联系人。 获取手机联系人 获取手机通讯录
安卓获得通讯录联系人
1.首先是联系人实体类: /** 用于描述一个联系人 */ public class Contact { private int id; private String name; private String email; private String address; private int photoId; private Bitmap photo; private Stri
iOS开发:通讯录之联系人添加、移动、删除
iOS开发:通讯录之联系人添加、移动、删除 *说明:一些属性和前期方法可查看昨天的相关内容,现在接着昨天的通讯录写添加联系人、移动联系人(cell)、删除联系人。 1.删除:四步走 *说明:通讯录最外层应该是一个字典,里面的key应该是首字母,value值就首字母对应的名字数组; 例如:   { S --------->[宋江/ 孙二娘]  },这就是字典里的一对key--value键
Swift - 添加、修改、删除通讯录联系人
使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人。同时,还能对通讯录进行新增、修改、删除联系人操作。 (注意:这些操作同查询一样,首先需要发起授权请求) 1,添加新联系人import UIKit import AddressBook import AddressBookUIclass ViewController: UIViewController {
Android 通讯录添加联系人 自定义电话类型
// 添加电话 values.clear(); values.put("raw_contact_id", contactId); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); values.put("data2", "0");//设置类型为自定义
用数据库实现通讯录(添加和查看联系人)
今晚就实现两个功能,可运行,细节有待完善,好饿。 明天再完善。void add_contact() { int ret; char sql[MAX_SIZE]; char name[MAX_SIZE]; char tel[MAX_SIZE]; char addr[MAX_SIZE]; char flag;printf("please p
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview