Android -- ContentProvider与联系人

简介:

数据库                                                                                        

读联系人

  • raw_contacts表:保存联系人的id      contact_id保存联系人的id
  • data表:保存联系人的数据    data1存放数据    mimetype_id存放数据类型   raw_contact_id存放数据属于哪一个联系人的
  • mimetypes表:保存数据的类型  1 –> email  5 –>phone  7 –>name

流程:

1.查询raw_contact表,把所有的联系人的id取出来。

2.根据id查询data表,把这个id对应的所有的数据取出来。

3.根据数据的类型 查询mimetypes表获取数据业务的类型。

写联系人

1.在raw_contact表中添加一个id。

2.使用这个新添加的id在data表里面添加对应的数据。

读取                                                                                          

复制代码
public class MainActivity extends Activity {

    private Button btn_read;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_read = (Button) findViewById(R.id.btn_read);
        btn_read.setOnClickListener(new buttonLisnter());
    }

    class buttonLisnter implements OnClickListener {

        @Override
        public void onClick(View v) {
            // 查询raw_contact表获取联系人ID
            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);
            while (cursor.moveToNext()) {
                String id = cursor.getString(cursor
                        .getColumnIndex("contact_id"));
                System.out.println("id====" + id);
                Cursor dataCursor = resolver.query(datauri, null,
                        "raw_contact_id=?", new String[] { id }, null);
                while (dataCursor.moveToNext()) {
                    String data1 = dataCursor.getString(dataCursor
                            .getColumnIndex("data1"));
                    String mimetype = dataCursor.getString(dataCursor
                            .getColumnIndex("mimetype"));
                    System.out.println("data1=" + data1
                            + "--------------mimetype=" + mimetype);
                }
                dataCursor.close();
                System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            }
            cursor.close();
        }

    }

}
复制代码

写入                                                                                          

复制代码
case R.id.btn_write:
                // 向raw_contact表里调价联系人的id
                ContentResolver reslo = getContentResolver();
                // 获取raw_contact对应的uri
                Uri uri1 = Uri
                        .parse("content://com.android.contacts/raw_contacts");
                Uri datauri1 = Uri.parse("content://com.android.contacts/data");
                ContentValues values = new ContentValues();
                Cursor cursor1 = reslo.query(uri1, new String[] { "_id" },
                        null, null, null);
                cursor1.moveToNext();
                int lastId = cursor1.getInt(0);
                int newId = lastId + 1;
                values.put("_id", newId);
                reslo.insert(uri1, values);
                // 添加data1
                ContentValues phoneValues = new ContentValues();
                phoneValues.put("data1", "88888888888");
                phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");
                phoneValues.put("raw_contact_id", newId);
                reslo.insert(datauri1, phoneValues);

                ContentValues emailValues = new ContentValues();
                emailValues.put("data1", "admin@yyd.com");
                emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");
                emailValues.put("raw_contact_id", newId);
                reslo.insert(datauri1, emailValues);

                ContentValues nameValues = new ContentValues();
                nameValues.put("data1", "admin@yyd.com");
                nameValues.put("mimetype", "vnd.android.cursor.item/name");
                nameValues.put("raw_contact_id", newId);
                reslo.insert(datauri1, nameValues);

                Toast.makeText(MainActivity.this, "插入OK", Toast.LENGTH_LONG)
                        .show();

                break;
复制代码

注意                                                                                           

当联系人被删除之后,其实联系人还是存在在数据库里面的,但是只是”contact_id”为null了,所以为了不取出用户已经删除的联系人,读取到的”contact_id”需要判断一下是否为null。

我是天王盖地虎的分割线                                                                 

源代码:http://pan.baidu.com/s/1dD1Qx01

读取联系人.zip




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3792576.html,如需转载请自行联系原作者

相关文章
|
6月前
|
数据库 Android开发 开发者
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
328 0
|
6月前
|
XML Java Android开发
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
443 0
|
5月前
|
SQL XML Java
Android 这 13 道 ContentProvider 面试题,你都会了吗?
Android 这 13 道 ContentProvider 面试题,你都会了吗?
|
5月前
|
安全 数据库 Android开发
45. 【Android教程】内容提供者 - Content Provider
45. 【Android教程】内容提供者 - Content Provider
65 2
|
6月前
|
Android开发
Android通讯录开发之通讯录联系人搜索功能最新实现
Android通讯录开发之通讯录联系人搜索功能最新实现
|
6月前
|
存储 安全 Android开发
Android数据存储:请解释ContentProvider是什么,它的主要作用是什么?
ContentProvider是Android的四大组件之一,主要负责结构化数据的管理与共享。它封装数据并提供安全的访问接口,通过URI实现应用间数据的标准化共享。ContentResolver与ContentProvider协作,处理数据的CRUD操作,使得其他应用能方便地调用和操作数据。
58 0
|
6月前
|
数据库 Android开发 Kotlin
android开发,使用kotlin学习ContentProvider
android开发,使用kotlin学习ContentProvider
115 0
|
API 数据库 Android开发
Android ContentProvider内容提供者详解
Android ContentProvider内容提供者详解
77 2
|
Java Android开发
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
91 0
|
存储 API 数据库
Android:四大组件之 ContentProvider(外共享数据)
数据库在 Android 当中是私有的,不能将数据库设为 WORLD_READABLE,每个数据库都只能允许创建它的包访问。这意味着只有创建这个数据库的应用程序才可访问它。也就是说不能跨越进程和包的边界,直接访问别的应用程序的数据库。那么如何在应用程序间交换数据呢? 如果需要在进程间传递数据,可以使用 ContentProvider 来实现。
349 0
Android:四大组件之 ContentProvider(外共享数据)
下一篇
无影云桌面