android 2.0中电话本contact的读写操作(增删改查),Android 2.0中电话本contact的读写操作(增删改查)...

public static final String[] PROJECTION_CONTACTS = { Contacts._ID,

Contacts.PHOTO_ID, Contacts.IN_VISIBLE_GROUP,

Contacts.HAS_PHONE_NUMBER, Contacts.DISPLAY_NAME,

Contacts.CUSTOM_RINGTONE };

/**

* wu0wu

*

* 功能:查询所有联系人PROJECTION_CONTACTS信息

*

* */

public static void _getContacts(ContentResolver cr) {

Cursor cursorContact = null;

try {

cursorContact = cr.query(ContactsContract.Contacts.CONTENT_URI,

PROJECTION_CONTACTS, Contacts.IN_VISIBLE_GROUP + "=1",

null, null);

Log.e("wu0wu", "联系人个数=" + cursorContact.getCount());

int[] indexs = getColumnIndexs(PROJECTION_CONTACTS, cursorContact);

while (cursorContact.moveToNext()) {

Log.e("wu0wu", "------------------------------------");

for (int i = 0; i < PROJECTION_CONTACTS.length; i++) {

String value = cursorContact.getString(indexs[i]);

Log.e("wu0wu", PROJECTION_CONTACTS[i] + "=" + value);

}

}

} catch (Exception e) {

Log.e("wu0wu", e.toString());

} finally {

if (cursorContact != null) {

cursorContact.close();

}

}

}

private static int[] getColumnIndexs(String[] projections, Cursor c) {

int[] ret = new int[projections.length];

for (int i = 0; i < projections.length; i++) {

ret[i] = c.getColumnIndex(projections[i]);

}

return ret;

}

3.2.2 根据contactId查询联系人详细

// phone

private static final String[] PROJECTION_PHONENUMBER_CONTACT = {

Phone.NUMBER, Phone.TYPE, Phone.LABEL };

/* DISPLAY_NAME唯一性 */

private static final String[] PROJECTION_DISPLAYNAME_CONTACT = { StructuredName.DISPLAY_NAME };

// Email

private static final String[] PROJECTION_EAMIL_CONTACT = { Email.DATA1,

Email.TYPE, Email.LABEL };

// IM

private static final String[] PROJECTION_IM_CONTACT = new String[] {

Im.DATA, Im.TYPE, Im.LABEL, Im.PROTOCOL };

// address

private static final String[] PROJECTION_ADDRESS_CONTACT = new String[] {

StructuredPostal.STREET, StructuredPostal.CITY,

StructuredPostal.REGION, StructuredPostal.POSTCODE,

StructuredPostal.COUNTRY, StructuredPostal.TYPE,

StructuredPostal.LABEL, StructuredPostal.POBOX,

StructuredPostal.NEIGHBORHOOD, };

// Organization

private static final String[] PROJECTION_ORGANIZATION_CONTACT = new String[] {

Organization.COMPANY, Organization.TYPE, Organization.LABEL,

Organization.TITLE };

// note

private static final String[] PROJECTION_NOTES_CONTACT = new String[] { Note.NOTE };

// nickname

private static final String[] PROJECTION_NICKNAMES_CONTACT = new String[] {

Nickname.NAME, Nickname.TYPE, Nickname.LABEL };

// website

private static final String[] PROJECTION_WEBSITES_CONTACT = new String[] {

Website.URL, Website.TYPE, Website.LABEL };

/**

* 功能:根据contactId查询联系人详细

*

* 在android.provider.ContactsContract.Data表里查询

* */

public static void _getContactByContactId(ContentResolver cr,

String contactId) {

Cursor c = null;

c = cr.query(Data.CONTENT_URI, null, Data.CONTACT_ID + "=?",

new String[] { contactId }, null);

String mimeType = null;

String[] contentValue = null;

ArrayList displayNameList = new ArrayList();// 存显示名

ArrayList phoneList = new ArrayList();// 存电话号码,可多个

ArrayList emailList = new ArrayList();// 存Email,可多个

ArrayList imList = new ArrayList();// 存im,可多个

ArrayList postalList = new ArrayList();// 存postal地址,可多个

ArrayList organizationList = new ArrayList();// 存organization组织,可多个

ArrayList noteList = new ArrayList();// 存note备注

ArrayList nicknameList = new ArrayList();// 存Nickname昵称

ArrayList websiteList = new ArrayList();// 存Website网站

while (c.moveToNext()) {

// 根据mimeType分类信息

mimeType = c.getString(c.getColumnIndex(Data.MIMETYPE));

if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_DISPLAYNAME_CONTACT);

displayNameList.add(contentValue);

} else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {

// 每个contentValue存一类PROJECTION_PHONENUMBER_CONTACT数据

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_PHONENUMBER_CONTACT);

phoneList.add(contentValue);

} else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_EAMIL_CONTACT);

emailList.add(contentValue);

} else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_IM_CONTACT);

imList.add(contentValue);

} else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_ADDRESS_CONTACT);

postalList.add(contentValue);

} else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_ORGANIZATION_CONTACT);

organizationList.add(contentValue);

} else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_NOTES_CONTACT);

noteList.add(contentValue);

} else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_NICKNAMES_CONTACT);

nicknameList.add(contentValue);

} else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) {

contentValue = MyUtils.getStringInContactCursor(c,

PROJECTION_WEBSITES_CONTACT);

websiteList.add(contentValue);

}

}

c.close();

// log

MyUtils.logContactsDetails("displayName",PROJECTION_DISPLAYNAME_CONTACT, displayNameList);

MyUtils.logContactsDetails("phoneNumber",PROJECTION_PHONENUMBER_CONTACT, phoneList);

MyUtils.logContactsDetails("Email", PROJECTION_EAMIL_CONTACT,emailList);

MyUtils.logContactsDetails("IM", PROJECTION_IM_CONTACT, imList);

MyUtils.logContactsDetails("Address", PROJECTION_ADDRESS_CONTACT,postalList);

MyUtils.logContactsDetails("Organization",PROJECTION_ORGANIZATION_CONTACT, organizationList);

MyUtils.logContactsDetails("Note", PROJECTION_NOTES_CONTACT, noteList);

MyUtils.logContactsDetails("NickName", PROJECTION_NICKNAMES_CONTACT,nicknameList);

MyUtils.logContactsDetails("WebSit", PROJECTION_WEBSITES_CONTACT,websiteList);

}

用到的两个方法:

public static String[] getStringInContactCursor(Cursor c,

String[] projection) {

String[] contentValue = new String[projection.length];

for (int i = 0; i < contentValue.length; i++) {

String value = c.getString(c.getColumnIndex(projection[i]));

if (value == null) {

contentValue[i] = "";

} else {

contentValue[i] = value;

}

}

return contentValue;

}

public static void logContactsDetails(String title, String[] projection,

ArrayList data) {

Log.e("wu0wu", "--------" + title + "--------");

for (int i = 0; i < data.size(); i++) {

for (int j = 0; j < data.get(i).length; j++) {

Log.e("wu0wu", projection[j] + "=" + data.get(i)[j]);

}

}

}

3.3 新建联系人

接口方法:

/**

* 新建联系人的接口

*

* @param String

* accountName,accountType 为账号名账号类型,一般为NULL

* @throws RemoteException

* @throws OperationApplicationException

*/

public static String _insertContact(ContentResolver cr, String accountName,

String accountType, String displayName, ArrayList phone,

ArrayList email, ArrayList im,

ArrayList address, ArrayList organization,

ArrayList notes, ArrayList nickname,

ArrayList website) throws RemoteException,

OperationApplicationException {

ArrayList ops = new ArrayList();

String rawId = "";

long rawContactId = insertRawContact(cr, accountName, accountType);

rawId = Long.toString(rawContactId);

if (displayName != null) {

insertContactDisplayname(ops, StructuredName.CONTENT_ITEM_TYPE,

rawId, displayName);

}

if (phone != null) {

for (int j = 0; j < phone.size(); j++) {

String[] item = phone.get(j);

insertItemToContact(ops, Phone.CONTENT_ITEM_TYPE, rawId,

PROJECTION_PHONENUMBER_CONTACT, item);

}

}

if (email != null) {

for (int j = 0; j < email.size(); j++) {

String[] item = email.get(j);

insertItemToContact(ops, Email.CONTENT_ITEM_TYPE, rawId,

PROJECTION_EAMIL_CONTACT, item);

}

}

if (im != null) {

for (int j = 0; j < im.size(); j++) {

String[] item = im.get(j);

insertItemToContact(ops, Im.CONTENT_ITEM_TYPE, rawId,

PROJECTION_IM_CONTACT, item);

}

}

if (address != null) {

for (int j = 0; j < address.size(); j++) {

String[] item = address.get(j);

insertItemToContact(ops, StructuredPostal.CONTENT_ITEM_TYPE,

rawId, PROJECTION_ADDRESS_CONTACT, item);

}

}

if (organization != null) {

for (int j = 0; j < organization.size(); j++) {

String[] item = organization.get(j);

insertItemToContact(ops, Organization.CONTENT_ITEM_TYPE, rawId,

PROJECTION_ORGANIZATION_CONTACT, item);

}

}

if (notes != null) {

for (int j = 0; j < notes.size(); j++) {

String[] item = notes.get(j);

insertItemToContact(ops, Note.CONTENT_ITEM_TYPE, rawId,

PROJECTION_NOTES_CONTACT, item);

}

}

if (nickname != null) {

for (int j = 0; j < nickname.size(); j++) {

String[] item = nickname.get(j);

insertItemToContact(ops, Nickname.CONTENT_ITEM_TYPE, rawId,

PROJECTION_NICKNAMES_CONTACT, item);

}

}

if (website != null) {

for (int j = 0; j < website.size(); j++) {

String[] item = website.get(j);

insertItemToContact(ops, Website.CONTENT_ITEM_TYPE, rawId,

PROJECTION_WEBSITES_CONTACT, item);

}

}

cr.applyBatch(ContactsContract.AUTHORITY, ops);

return rawId;

}

/*

* 通过往ROWCONTACT里插入数据,获得rawId

*

* @param cr

*

* @param accountName 一般为NULL

*

* @param accountType 一般为NULL

*

* @return

*/

private static long insertRawContact(ContentResolver cr,

String accountName, String accountType) {

ContentValues values = new ContentValues();

values.put(RawContacts.ACCOUNT_NAME, accountName);

values.put(RawContacts.ACCOUNT_TYPE, accountType);

// values.put(Contacts.DISPLAY_NAME, displayName);

Uri rawContactUri = cr.insert(RawContacts.CONTENT_URI, values);

long rawContactId = ContentUris.parseId(rawContactUri);

return rawContactId;

}

private static void insertContactDisplayname(

ArrayList ops, String mimeType,

String rawContactId, String displayName) throws RemoteException,

OperationApplicationException {

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(

Data.MIMETYPE, mimeType).withValue(Data.RAW_CONTACT_ID,

rawContactId).withValue(StructuredName.DISPLAY_NAME,

displayName).build());

}

private static void insertItemToContact(

ArrayList ops, String mimeType,

String rawContactId, String[] PROJECTION_CONTACT, String[] item)

throws RemoteException, OperationApplicationException {

// ContentValues values = new ContentValues();

// values.put(Data.RAW_CONTACT_ID, rawContactId);

// values.put(Data.MIMETYPE, mimeType);

// for (int i = 0; i < PROJECTION_CONTACT.length; i++) {

// values.put(PROJECTION_CONTACT[i], item[i]);

// }

// Uri dataUri = cr.insert(Data.CONTENT_URI, values);

Builder builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);

builder.withYieldAllowed(true);

builder.withValue(Data.RAW_CONTACT_ID, rawContactId);

builder.withValue(Data.MIMETYPE, mimeType);

for (int i = 0; i < PROJECTION_CONTACT.length; i++) {

builder.withValue(PROJECTION_CONTACT[i], item[i]);

}

ops.add(builder.build());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的通讯录的 SQLite 数据库增删改查的示例代码: 1. 创建 SQLiteOpenHelper 子类 ```java public class ContactsDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "contacts.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "contacts"; private static final String ID = "_id"; private static final String NAME = "name"; private static final String PHONE = "phone"; private static final String EMAIL = "email"; public ContactsDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " TEXT, " + PHONE + " TEXT, " + EMAIL + " TEXT)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } ``` 2. 在 Activity 操作数据库 ```java public class MainActivity extends AppCompatActivity { private ContactsDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new ContactsDatabaseHelper(this); // 插入数据 insertData("Alice", "123456789", "alice@example.com"); insertData("Bob", "987654321", "bob@example.com"); // 查询数据 List<Contact> contacts = queryData(); for (Contact contact : contacts) { Log.d("MainActivity", "id: " + contact.getId() + ", name: " + contact.getName() + ", phone: " + contact.getPhone() + ", email: " + contact.getEmail()); } // 更新数据 updateData(1, "New Alice", "111111111", "new_alice@example.com"); // 删除数据 deleteData(2); // 查询数据 contacts = queryData(); for (Contact contact : contacts) { Log.d("MainActivity", "id: " + contact.getId() + ", name: " + contact.getName() + ", phone: " + contact.getPhone() + ", email: " + contact.getEmail()); } } private void insertData(String name, String phone, String email) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("phone", phone); values.put("email", email); db.insert("contacts", null, values); db.close(); } private List<Contact> queryData() { List<Contact> contacts = new ArrayList<>(); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("contacts", null, null, null, null, null, null); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("_id")); String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); String email = cursor.getString(cursor.getColumnIndex("email")); contacts.add(new Contact(id, name, phone, email)); } cursor.close(); db.close(); return contacts; } private void updateData(int id, String name, String phone, String email) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("phone", phone); values.put("email", email); db.update("contacts", values, "_id=?", new String[]{String.valueOf(id)}); db.close(); } private void deleteData(int id) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("contacts", "_id=?", new String[]{String.valueOf(id)}); db.close(); } } ``` 3. Contact 类 ```java public class Contact { private int id; private String name; private String phone; private String email; public Contact(int id, String name, String phone, String email) { this.id = id; this.name = name; this.phone = phone; this.email = email; } public int getId() { return id; } public String getName() { return name; } public String getPhone() { return phone; } public String getEmail() { return email; } } ``` 这样,一个简单的通讯录的 SQLite 数据库增删改查就完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值