昨天在写向通讯录中添加联系人的小demo得时候,出现了一个问题。
因为我是想在添加联系人的时候,弹出一个dialog用来接收用户新输入的联系人信息。写完之后发现,联系人中并没有新添加的联系人,而是多了一个名叫(未知)的联系人,而且电话号码为空。
经过一段时间的查找排爆,才发现。dialog中的布局我自定的View,所以在进行布局解析的时候,一定要让这个view变成final形式。(第6行)
否则的话,点击之后,临时字符串并不能获取edittext中的值,反而是个空值。(第10、11行)
private void myDialog() {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
LayoutInflater inflater =LayoutInflater.from(this);
final View layout=inflater.inflate(R.layout.dialog_view,null);
dialog.setView(layout);
dialog.setPositiveButton("添加", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
et_name = (EditText) layout.findViewById(R.id.name);
et_phone = (EditText)layout.findViewById(R.id.phone);
name = ""+et_name.getText().toString();
phone = ""+et_phone.getText().toString();
addFriend(name, phone, MainActivity.this); //此方法往手机通讯录添加联系人
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
dialog.cancel();
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
dialog.show();
}
/*
相关方法
*/
public void addFriend(String name, String phone,Context context) {
ContactTest add = new ContactTest();
add.testInsert(name, phone, MainActivity.this);
}
/*
相关方法
*/
package liumengbaio.providertest;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.test.AndroidTestCase;
public class ContactTest extends AndroidTestCase{
private static final String TAG = "ContactTest";
/**
* 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
*
* 这是后面插入data表的数据,只有执行空值插入,才能使插入的联系人在通讯录里可见
*/
String name,phone;
public void testInsert(String name, String phone, Context context){
/* 往 raw_contacts 中添加数据,并获取添加的id号*/
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = context.getContentResolver();
ContentValues values = new ContentValues();
long contactId = ContentUris.parseId(resolver.insert(uri, values));
/* 往 data 中添加数据(要根据前面获取的id号) */
// 添加姓名
uri = Uri.parse("content://com.android.contacts/data");
values.put("raw_contact_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("data2", name);
resolver.insert(uri, values);
// 添加电话
values.clear();
values.put("raw_contact_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("data2", "2");
values.put("data1", phone);
resolver.insert(uri, values);
}
}