• 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

  • 相关阅读:
    加工零件(Dijkstra)
    尼克的任务(DP)
    挖地雷(记忆化搜索)
    滑雪(DP,记忆化搜索)
    子串和子序列(DP)
    八皇后(DFS)
    打印feign报错日志
    restTemplate 踩坑
    共享全局对象
    获取当月多少天
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3792576.html
Copyright © 2020-2023  润新知