package com.xiaobin.content_resolver_crud;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
/**
* @author Administrator 不要把getMenuInflater().inflate(R.layout.dialog_execdata,
* menu); 和listview_item布局文件相混淆..... ount =
* resolver.update(Uri.parse(uri_raw_contacts), values, "_id=?", new S
* 这里面的_id必须和数据库的相对应 mimetype=7 后面没有_id
*
*/
public class MainActivity extends Activity {
private String uri_raw_contacts = "content://com.android.contacts/raw_contacts";
private String uri_contacts_phones = "content://com.android.contacts/data/phones";
private String uri_contacts_emails = "content://com.android.contacts/data/emails";
private String uri_contacts_data = "content://com.android.contacts/data";
private ListView listView;
private TextView textView;
private SimpleAdapter adapter = null;
private ContentResolver resolver = null;
private List<Map<String, String>> totalList = new ArrayList<Map<String, String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resolver = getContentResolver();
initview();
}
private void initview() {
// TODO Auto-generated method stub
listView = (ListView) findViewById(R.id.listView_show);
textView = (TextView) findViewById(R.id.textView_empty);
totalList = selectList();
adapter = new SimpleAdapter(this, totalList,
R.layout.item_listview_main, new String[] { "displayname",
"phones", "emails" }, new int[] {
R.id.textView_item_displayname,
R.id.textView_item_phones, R.id.textView_item_emails });
listView.setAdapter(adapter);
listView.setEmptyView(textView);
registerForContextMenu(listView);
}
private List<Map<String, String>> selectList() {
// TODO Auto-generated method stub
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Cursor cursor_contact = resolver.query(Uri.parse(uri_raw_contacts),
new String[] { "_id", "display_name" }, null, null, null);
while (cursor_contact.moveToNext()) {
Map<String, String> map = new HashMap<String, String>();
String id = cursor_contact.getString(cursor_contact
.getColumnIndex("_id"));
String displaynameString = cursor_contact.getString(cursor_contact
.getColumnIndex("display_name"));
map.put("id", id);
map.put("displayname", displaynameString);
Cursor cursorphonesCursor = resolver.query(
Uri.parse(uri_contacts_phones), new String[] { "data1" },
"raw_contact_id=?", new String[] { id }, null);
StringBuilder sbphoneBuilder = new StringBuilder();
while (cursorphonesCursor.moveToNext()) {
sbphoneBuilder.append(cursorphonesCursor
.getString(cursorphonesCursor.getColumnIndex("data1")));
}
map.put("phones", sbphoneBuilder.toString());
cursorphonesCursor.close();
cursorphonesCursor = null;
Cursor cursor_emails = resolver.query(
Uri.parse(uri_contacts_emails), new String[] { "data1" },
"raw_contact_id=?", new String[] { id }, null);
StringBuilder sBuilder_emailsBuilder = new StringBuilder();
while (cursor_emails.moveToNext()) {
sBuilder_emailsBuilder.append(cursor_emails
.getString(cursor_emails.getColumnIndex("data1")));
}
map.put("emails", sBuilder_emailsBuilder.toString());
cursor_emails.close();
cursor_emails = null;
list.add(map);
}
return list;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.action_insert:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("增加联系人");
View view = getLayoutInflater().inflate(R.layout.dialog_execdata,
null);
final EditText editText_nameEditText = (EditText) view
.findViewById(R.id.editText_dialog_displayname);
final EditText editText_phonesEditText = (EditText) view
.findViewById(R.id.editText_dialog_phone);
final EditText editText_emailsEditText = (EditText) view
.findViewById(R.id.editText_dialog_email);
builder.setView(view);
builder.setNegativeButton("取消", null);
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
String nameString = editText_nameEditText.getText()
.toString();
String phoneString = editText_phonesEditText.getText()
.toString();
String emailsString = editText_emailsEditText.getText()
.toString();
boolean flag = insertcontact(nameString, phoneString,
emailsString);
if (flag) {
reloadList();
} else {
Toast.makeText(MainActivity.this, "插入失败!!!",
Toast.LENGTH_SHORT).show();
}
}
});
builder.show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
protected void reloadList() {
// TODO Auto-generated method stub
totalList.clear();
totalList.addAll(selectList());
adapter.notifyDataSetChanged();
}
protected boolean insertcontact(String nameString, String phoneString,
String emailsString) {
// TODO Auto-generated method stub
// 获取到ID
ContentValues values = new ContentValues();
Uri uri = resolver.insert(Uri.parse(uri_raw_contacts), values);
long id = ContentUris.parseId(uri);
// 向data表中加入name
values.clear();
values.put("raw_contact_id", id);
values.put("data1", nameString);
values.put("data2", nameString);
values.put("mimetype", "vnd.android.cursor.item/name");
resolver.insert(uri.parse(uri_contacts_data), values);
// 加入phone
values.clear();
values.put("raw_contact_id", id);// id可以重复 表示同一个对象的不同信息.....
values.put("data1", phoneString);
values.put("data2", "2");
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
resolver.insert(uri.parse(uri_contacts_data), values);
// 加入emails
values.clear();
values.put("raw_contact_id", id);
values.put("data1", emailsString);
values.put("data2", "1");
values.put("mimetype", "vnd.android.cursor.item/email_v2");
resolver.insert(uri.parse(uri_contacts_data), values);
return true;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
menu.setHeaderIcon(R.drawable.ic_launcher);
menu.setHeaderTitle(totalList.get(info.position).get("displayname"));
getMenuInflater().inflate(R.menu.contextmenu_listview_main, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
.getMenuInfo();
final String id = totalList.get(menuInfo.position).get("id");
Log.i("MainActivity", id);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
switch (item.getItemId()) {
case R.id.action_update:
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("更新联系人");
View view = getLayoutInflater().inflate(R.layout.dialog_execdata,
null);
final EditText editText_nameEditText = (EditText) view
.findViewById(R.id.editText_dialog_displayname);
final EditText editText_phonesEditText = (EditText) view
.findViewById(R.id.editText_dialog_phone);
final EditText editText_emailsEditText = (EditText) view
.findViewById(R.id.editText_dialog_email);
String name = totalList.get(menuInfo.position).get("displayname");
String phones = totalList.get(menuInfo.position).get("phones");
String emails = totalList.get(menuInfo.position).get("emails");
editText_nameEditText.setText(name);
editText_phonesEditText.setText(phones);
editText_emailsEditText.setText(emails);
builder.setView(view);
builder.setNegativeButton("取消", null);
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
boolean flag = updateInfo(id, editText_nameEditText
.getText().toString(), editText_phonesEditText
.getText().toString(), editText_emailsEditText
.getText().toString());
if (flag) {
reloadList();
} else {
Toast.makeText(MainActivity.this, "更新数据失败!!!!!!",
Toast.LENGTH_SHORT).show();
}
}
});
builder.show();
break;
case R.id.action_delete:
boolean flag = deleteContact(id);
if (flag) {
reloadList();
} else {
Toast.makeText(MainActivity.this, "删除失败!!!!!!",
Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
return super.onContextItemSelected(item);
}
protected boolean updateInfo(String id, String name, String phones,
String emails) {
// TODO Auto-generated method stub
ContentValues values = new ContentValues();
// 先更新 rawcontact表中的name的信息
values.put("display_name", name);
values.put("display_name_alt", name);
values.put("sort_key", name);
values.put("sort_key_alt", name);
int count1 = resolver.update(Uri.parse(uri_raw_contacts), values,
"_id=?", new String[] { id });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count1);
// 然后更新 data表中的name的信息
values.clear();
values.put("data1", name);
values.put("data2", name);
// values.put("mimetype", "vnd.android.cursor.item/name");
int count2 = resolver.update(Uri.parse(uri_contacts_data), values,
"raw_contact_id=? and mimetype_id=?", new String[] { id, "7" });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count2);
values.clear();
values.put("data1", phones);
values.put("data2", "2");
// values.put("mimetype", "vnd.android.cursor.item/phone_v2");
int count3 = resolver.update(Uri.parse(uri_contacts_data), values,
"raw_contact_id=? and mimetype_id=5 ", new String[] { id });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count3);
values.clear();
values.put("data1", emails);
values.put("data2", "1");
values.put("mimetype", "vnd.android.cursor.item/email_v2");
int count4 = resolver.update(Uri.parse(uri_contacts_data), values,
"raw_contact_id=? and mimetype_id=1 ", new String[] { id });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count4);
// // 然后更新 data表中的phones的信息
// values.clear();
// values.put("data1", phones);
// values.put("data2", "2");
// // values.put("mimetype_id", "5");
// // values.put("mimetype", "vnd.android.cursor.item/phone_v2");
// int count3 = resolver.update(Uri.parse(uri_contacts_data), values,
// "raw_contact_id=?and and mimetype_id=5", new String[] { id });
//
// values.clear();
// values.put("data1", emails);
// values.put("data2", "1");
// // values.put("mimetype_id", "1");
// // values.put("mimetype", "vnd.android.cursor.item/email_v2");
// int count4 = resolver.update(Uri.parse(uri_contacts_data), values,
// "raw_contact_id=?and and mimetype_id=1 ", new String[] { id });
// values.clear();
if (count1 > 0 && count2 > 0 && count3 > 0 && count4 > 0) {
return true;
}
return false;
}
private boolean deleteContact(String id) {
// TODO Auto-generated method stub
int result = resolver.delete(Uri.parse(uri_raw_contacts), "_id=?",
new String[] { id });
return result > 0 ? true : false;
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
/**
* @author Administrator 不要把getMenuInflater().inflate(R.layout.dialog_execdata,
* menu); 和listview_item布局文件相混淆..... ount =
* resolver.update(Uri.parse(uri_raw_contacts), values, "_id=?", new S
* 这里面的_id必须和数据库的相对应 mimetype=7 后面没有_id
*
*/
public class MainActivity extends Activity {
private String uri_raw_contacts = "content://com.android.contacts/raw_contacts";
private String uri_contacts_phones = "content://com.android.contacts/data/phones";
private String uri_contacts_emails = "content://com.android.contacts/data/emails";
private String uri_contacts_data = "content://com.android.contacts/data";
private ListView listView;
private TextView textView;
private SimpleAdapter adapter = null;
private ContentResolver resolver = null;
private List<Map<String, String>> totalList = new ArrayList<Map<String, String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resolver = getContentResolver();
initview();
}
private void initview() {
// TODO Auto-generated method stub
listView = (ListView) findViewById(R.id.listView_show);
textView = (TextView) findViewById(R.id.textView_empty);
totalList = selectList();
adapter = new SimpleAdapter(this, totalList,
R.layout.item_listview_main, new String[] { "displayname",
"phones", "emails" }, new int[] {
R.id.textView_item_displayname,
R.id.textView_item_phones, R.id.textView_item_emails });
listView.setAdapter(adapter);
listView.setEmptyView(textView);
registerForContextMenu(listView);
}
private List<Map<String, String>> selectList() {
// TODO Auto-generated method stub
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Cursor cursor_contact = resolver.query(Uri.parse(uri_raw_contacts),
new String[] { "_id", "display_name" }, null, null, null);
while (cursor_contact.moveToNext()) {
Map<String, String> map = new HashMap<String, String>();
String id = cursor_contact.getString(cursor_contact
.getColumnIndex("_id"));
String displaynameString = cursor_contact.getString(cursor_contact
.getColumnIndex("display_name"));
map.put("id", id);
map.put("displayname", displaynameString);
Cursor cursorphonesCursor = resolver.query(
Uri.parse(uri_contacts_phones), new String[] { "data1" },
"raw_contact_id=?", new String[] { id }, null);
StringBuilder sbphoneBuilder = new StringBuilder();
while (cursorphonesCursor.moveToNext()) {
sbphoneBuilder.append(cursorphonesCursor
.getString(cursorphonesCursor.getColumnIndex("data1")));
}
map.put("phones", sbphoneBuilder.toString());
cursorphonesCursor.close();
cursorphonesCursor = null;
Cursor cursor_emails = resolver.query(
Uri.parse(uri_contacts_emails), new String[] { "data1" },
"raw_contact_id=?", new String[] { id }, null);
StringBuilder sBuilder_emailsBuilder = new StringBuilder();
while (cursor_emails.moveToNext()) {
sBuilder_emailsBuilder.append(cursor_emails
.getString(cursor_emails.getColumnIndex("data1")));
}
map.put("emails", sBuilder_emailsBuilder.toString());
cursor_emails.close();
cursor_emails = null;
list.add(map);
}
return list;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.action_insert:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("增加联系人");
View view = getLayoutInflater().inflate(R.layout.dialog_execdata,
null);
final EditText editText_nameEditText = (EditText) view
.findViewById(R.id.editText_dialog_displayname);
final EditText editText_phonesEditText = (EditText) view
.findViewById(R.id.editText_dialog_phone);
final EditText editText_emailsEditText = (EditText) view
.findViewById(R.id.editText_dialog_email);
builder.setView(view);
builder.setNegativeButton("取消", null);
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
String nameString = editText_nameEditText.getText()
.toString();
String phoneString = editText_phonesEditText.getText()
.toString();
String emailsString = editText_emailsEditText.getText()
.toString();
boolean flag = insertcontact(nameString, phoneString,
emailsString);
if (flag) {
reloadList();
} else {
Toast.makeText(MainActivity.this, "插入失败!!!",
Toast.LENGTH_SHORT).show();
}
}
});
builder.show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
protected void reloadList() {
// TODO Auto-generated method stub
totalList.clear();
totalList.addAll(selectList());
adapter.notifyDataSetChanged();
}
protected boolean insertcontact(String nameString, String phoneString,
String emailsString) {
// TODO Auto-generated method stub
// 获取到ID
ContentValues values = new ContentValues();
Uri uri = resolver.insert(Uri.parse(uri_raw_contacts), values);
long id = ContentUris.parseId(uri);
// 向data表中加入name
values.clear();
values.put("raw_contact_id", id);
values.put("data1", nameString);
values.put("data2", nameString);
values.put("mimetype", "vnd.android.cursor.item/name");
resolver.insert(uri.parse(uri_contacts_data), values);
// 加入phone
values.clear();
values.put("raw_contact_id", id);// id可以重复 表示同一个对象的不同信息.....
values.put("data1", phoneString);
values.put("data2", "2");
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
resolver.insert(uri.parse(uri_contacts_data), values);
// 加入emails
values.clear();
values.put("raw_contact_id", id);
values.put("data1", emailsString);
values.put("data2", "1");
values.put("mimetype", "vnd.android.cursor.item/email_v2");
resolver.insert(uri.parse(uri_contacts_data), values);
return true;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
menu.setHeaderIcon(R.drawable.ic_launcher);
menu.setHeaderTitle(totalList.get(info.position).get("displayname"));
getMenuInflater().inflate(R.menu.contextmenu_listview_main, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
.getMenuInfo();
final String id = totalList.get(menuInfo.position).get("id");
Log.i("MainActivity", id);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
switch (item.getItemId()) {
case R.id.action_update:
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("更新联系人");
View view = getLayoutInflater().inflate(R.layout.dialog_execdata,
null);
final EditText editText_nameEditText = (EditText) view
.findViewById(R.id.editText_dialog_displayname);
final EditText editText_phonesEditText = (EditText) view
.findViewById(R.id.editText_dialog_phone);
final EditText editText_emailsEditText = (EditText) view
.findViewById(R.id.editText_dialog_email);
String name = totalList.get(menuInfo.position).get("displayname");
String phones = totalList.get(menuInfo.position).get("phones");
String emails = totalList.get(menuInfo.position).get("emails");
editText_nameEditText.setText(name);
editText_phonesEditText.setText(phones);
editText_emailsEditText.setText(emails);
builder.setView(view);
builder.setNegativeButton("取消", null);
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
boolean flag = updateInfo(id, editText_nameEditText
.getText().toString(), editText_phonesEditText
.getText().toString(), editText_emailsEditText
.getText().toString());
if (flag) {
reloadList();
} else {
Toast.makeText(MainActivity.this, "更新数据失败!!!!!!",
Toast.LENGTH_SHORT).show();
}
}
});
builder.show();
break;
case R.id.action_delete:
boolean flag = deleteContact(id);
if (flag) {
reloadList();
} else {
Toast.makeText(MainActivity.this, "删除失败!!!!!!",
Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
return super.onContextItemSelected(item);
}
protected boolean updateInfo(String id, String name, String phones,
String emails) {
// TODO Auto-generated method stub
ContentValues values = new ContentValues();
// 先更新 rawcontact表中的name的信息
values.put("display_name", name);
values.put("display_name_alt", name);
values.put("sort_key", name);
values.put("sort_key_alt", name);
int count1 = resolver.update(Uri.parse(uri_raw_contacts), values,
"_id=?", new String[] { id });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count1);
// 然后更新 data表中的name的信息
values.clear();
values.put("data1", name);
values.put("data2", name);
// values.put("mimetype", "vnd.android.cursor.item/name");
int count2 = resolver.update(Uri.parse(uri_contacts_data), values,
"raw_contact_id=? and mimetype_id=?", new String[] { id, "7" });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count2);
values.clear();
values.put("data1", phones);
values.put("data2", "2");
// values.put("mimetype", "vnd.android.cursor.item/phone_v2");
int count3 = resolver.update(Uri.parse(uri_contacts_data), values,
"raw_contact_id=? and mimetype_id=5 ", new String[] { id });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count3);
values.clear();
values.put("data1", emails);
values.put("data2", "1");
values.put("mimetype", "vnd.android.cursor.item/email_v2");
int count4 = resolver.update(Uri.parse(uri_contacts_data), values,
"raw_contact_id=? and mimetype_id=1 ", new String[] { id });
Log.i("MainActivity", " 大于零表示成功!!!!!!!" + count4);
// // 然后更新 data表中的phones的信息
// values.clear();
// values.put("data1", phones);
// values.put("data2", "2");
// // values.put("mimetype_id", "5");
// // values.put("mimetype", "vnd.android.cursor.item/phone_v2");
// int count3 = resolver.update(Uri.parse(uri_contacts_data), values,
// "raw_contact_id=?and and mimetype_id=5", new String[] { id });
//
// values.clear();
// values.put("data1", emails);
// values.put("data2", "1");
// // values.put("mimetype_id", "1");
// // values.put("mimetype", "vnd.android.cursor.item/email_v2");
// int count4 = resolver.update(Uri.parse(uri_contacts_data), values,
// "raw_contact_id=?and and mimetype_id=1 ", new String[] { id });
// values.clear();
if (count1 > 0 && count2 > 0 && count3 > 0 && count4 > 0) {
return true;
}
return false;
}
private boolean deleteContact(String id) {
// TODO Auto-generated method stub
int result = resolver.delete(Uri.parse(uri_raw_contacts), "_id=?",
new String[] { id });
return result > 0 ? true : false;
}
}