只向android添加联系人姓名和号码,并在运行时显示在textview中
我正在尝试在android中插入联系人姓名和号码,并尝试在编辑视图中查看相同的联系人。。 我想给你看看代码 更新内容[我自己]: 通过以下链接获得答案; 代码:只向android添加联系人姓名和号码,并在运行时显示在textview中,android,android-intent,nullpointerexception,android-contentprovider,Android,Android Intent,Nullpointerexception,Android Contentprovider,我正在尝试在android中插入联系人姓名和号码,并尝试在编辑视图中查看相同的联系人。。 我想给你看看代码 更新内容[我自己]: 通过以下链接获得答案; 代码: import java.util.ArrayList; 导入android.app.Activity; 导入android.content.ContentProviderOperation; 导入android.content.ContentValues; 导入android.content.OperationApplicationE
import java.util.ArrayList;
导入android.app.Activity;
导入android.content.ContentProviderOperation;
导入android.content.ContentValues;
导入android.content.OperationApplicationException;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.os.RemoteException;
导入android.provider.contacts合同;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
公共类ContentProviderContactsDemo扩展活动
{
ContentValues=新的ContentValues();
//用于查看现有联系人姓名和号码
文本视图名称、编号;
//要在“添加”按钮上输入新联系人姓名和号码,请单击
编辑文本newname,newnumber;
//形成一个数组,指定要返回的列。
字符串[]投影=新字符串[]{
Contacts contract.Contacts.DISPLAY\u NAME,
Contacts contract.CommonDataTypes.Phone.NUMBER
};
//获取联系人内容提供程序中人员/联系人表的基本URI。
Uri contacts=contacts contract.commondatatypes.Phone.CONTENT\u Uri;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts\u显示);
name=(TextView)findViewById(R.id.name);
number=(TextView)findViewById(R.id.number);
newname=(EditText)findViewById(R.id.newname);
newnumber=(EditText)findViewById(R.id.newnumber);
makeQuery();
}
私有void makeQuery()
{
//进行查询。
游标managedCursor=getContentResolver().query(联系人,
投影,//返回哪些列
null,//返回哪些行(所有行)
null,//选择参数(无)
null//按名称升序排列结果
);
name.append(“\n”+“name\n”);
号码。附加(“\n”+”电话号码\n”);
//在文本视图中显示记录
getColumnData(managedCursor);
}
私有void getColumnData(游标cur)
{
字符串名称\u disp;
字符串phoneNumber_disp;
//将光标移动到第一个记录或行数据
cur.moveToFirst();
int nameColumn=cur.getColumnIndex(ContactsContract.Contacts.DISPLAY\u NAME);
int phoneColumn=cur.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER);
做
{
//获取字段值并在文本视图中显示
//取名字
name_disp=cur.getString(nameColumn);
//在TextView中插入它
名称。追加(“\n”+名称显示);
//获取电话号码
phoneNumber_disp=cur.getString(phoneColumn);
//在TextView中插入它
编号。追加(“\n”+电话号码\u disp);
}while(cur.moveToNext());
}
public void insertData(视图v)引发RemoteException、OperationApplicationException
{
字符串addname;
字符串addnumber;
addname=newname.getText().toString();
addnumber=newnumber.getText().toString();
////插入新联系人姓名和号码的一种方法错误!!!
//将记录添加到联系人并使其成为最喜爱的联系人。
//value.put(ContactsContract.CommonDataTypes.StructuredName.DISPLAY\u NAME,addname);
//value.put(Phone.NUMBER,addnumber);
//Uri Uri=getContentResolver().insert(ContactsContract.Data.CONTENT\u Uri,值);
//返回所添加记录的完整URI,即ID
////插入联系人姓名的其他方法
ArrayList ops=新的ArrayList();
if(addname!=null)
{
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,0)
.withValue(ContactsContact.Data.MIMETYPE、ContactsContact.CommonDataTypes.StructuredName.CONTENT\u ITEM\u TYPE)
.withValue(ContactsContract.CommonDataTypes.StructuredName.DISPLAY\u NAME,addname)
.build());
}
if(addnumber!=null)
{
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,0)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Phone.CONTENT\u ITEM\u TYPE)
.withValue(contacts contract.commonDataTypes.Phone.NUMBER,addnumber)
.withValue(ContactsContact.CommonDataTypes.Phone.TYPE,ContactsContact.CommonDataTypes.Phone.TYPE\u MOBILE)
.build());
}
尝试
{
getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);
}
捕获(例外e)
{
e、 printStackTrace();
Toast.makeText(这个,“异常:+e.getMessage(),Toast.LENGTH_SHORT).show();
}
//清除联系人显示列表并显示更新的联系人姓名和号码
name.setText(“”);
编号:setText(“”);
makeQuery();
}
}
我添加了注释,以使您理解代码。
我想要的是列出新插入的记录的联系人。。
我也不确定我的代码是否在contact中插入新记录,因为我无法查看它
显示布局文件的屏幕截图
正如您在布局中看到的,上面显示的联系人已经在android中添加了联系人。但是当我添加新联系人时,我无法看到更新的视图
请任何人都能在这方面帮助我。。
我不确定,但我认为当我按下“添加”按钮时,联系人实际上没有得到“添加”。因此,它没有更新或显示在上面的文本视图中。。
我在stack overflow和其他网站上的每一个地方都引用了大部分文章。但是
import java.util.ArrayList;
import android.app.Activity;
import android.content.ContentProviderOperation;
import android.content.ContentValues;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class ContentProviderContactsDemo extends Activity
{
ContentValues values = new ContentValues();
// for viewing existing contact name and number
TextView name, number;
// for entering new contact name and number on add button click
EditText newname, newnumber;
// Form an array specifying which columns to return.
String[] projection = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
// Get the base URI for the People/Contacts table in the Contacts content provider.
Uri contacts = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_display);
name = (TextView) findViewById(R.id.name);
number = (TextView) findViewById(R.id.number);
newname = (EditText) findViewById(R.id.newname);
newnumber = (EditText) findViewById(R.id.newnumber);
makeQuery();
}
private void makeQuery()
{
// Make the query.
Cursor managedCursor = getContentResolver().query(contacts,
projection, // Which columns to return
null, // Which rows to return (all rows)
null, // Selection arguments (none)
null // Put the results in ascending order by name
);
name.append("\n" + "NAME \n");
number.append("\n" + "PHONE NUMBERS \n");
// display records in TextView
getColumnData(managedCursor);
}
private void getColumnData(Cursor cur)
{
String name_disp;
String phoneNumber_disp;
//moving the cursor to the first record or row data
cur.moveToFirst();
int nameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int phoneColumn = cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
do
{
// Get the field values and display it in a TextView
//get Names
name_disp = cur.getString(nameColumn);
//insert it in TextView
name.append("\n" + name_disp);
//get phone number
phoneNumber_disp = cur.getString(phoneColumn);
//insert it in TextView
number.append("\n" + phoneNumber_disp);
} while (cur.moveToNext());
}
public void insertData(View v) throws RemoteException, OperationApplicationException
{
String addname;
String addnumber;
addname = newname.getText().toString();
addnumber = newnumber.getText().toString();
//// one way to insert the new contact name and number ERROR !!!
// Add Records to contacts and make him a favorite.
//values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, addname);
//values.put(Phone.NUMBER, addnumber);
//Uri uri = getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
// returns the full URI for the added record, meaning with the ID
//// other way to insert the contact name
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
if (addname != null)
{
ops.add(ContentProviderOperation.newInsert( ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,addname)
.build());
}
if (addnumber != null)
{
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, addnumber)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build());
}
try
{
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}
catch (Exception e)
{
e.printStackTrace();
Toast.makeText(this, "Exception: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
// clearing list of contact display and displaying with updated contact name and number
name.setText("");
number.setText("");
makeQuery();
}
}
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, name).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, fax)
.withValue(Phone.TYPE, Phone.TYPE_FAX_WORK).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, phone)
.withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
.withValue(Email.TYPE, Email.TYPE_WORK).build());
try {
ContentProviderResult[] res = getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops);
System.out.println("" + res);
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
}