当前位置:Gxlcms > 数据库问题 > 内容提供者 ContentResolver 数据库 示例 -2

内容提供者 ContentResolver 数据库 示例 -2

时间:2021-07-01 10:21:17 帮助过:3人阅读

技术分享
public class MainActivity extends ListActivity {    // 访问内容提供者时需要的主机名称    public static final String authority = "com.bqt.contentprovider.person";    private TextView tv_info;    private ContentResolver resolver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        String[] array = { "获取所有数据""插入一条name=bqt的数据""修改name=bqt的数据""删除name=bqt的数据""清空所有数据",//                "读取收件箱信息""往收件箱插入一条信息""读取手机联系人""查询\"110\"的联系人信息""添加一个新的联系人" };        for (int i = 0; i < array.length; i++) {            array[i] = i + "、" + array[i];        }        ListAdapter mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1new ArrayList<String>(Arrays.asList(array)));        resolver = getContentResolver();// 获取内容解析器        tv_info = new TextView(this);// 将内容显示在TextView中        tv_info.setTextColor(Color.BLUE);        tv_info.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);        tv_info.setPadding(20, 10, 20, 10);        getListView().addFooterView(tv_info);        setListAdapter(mAdapter);    }    @Override    protected void onListItemClick(ListView l, View v, int position, long id) {        Uri uri = null;        Uri returnUri = null;        StringBuffer sb = new StringBuffer();        int num = 0;        ContentValues values = new ContentValues();// 要修改或插入的数据        switch (position) {        case 0: // 获取所有数据            uri = Uri.parse("content://" + authority + "/query");// 指定解析器要解析的路径。注意query前要加路径分隔符【/】            Log.i("bqt", uri.toString());//【 content://com.bqt.contentprovider.person/query】            Cursor cursor = resolver.query(uri, nullnullnullnull);// 获取解析器解析的结果集            if (cursor != null) {                while (cursor.moveToNext()) {                    int uId = cursor.getInt(cursor.getColumnIndex("id"));// 取出需要的内容                    String uName = cursor.getString(cursor.getColumnIndex("name"));                    String uNumber = cursor.getString(cursor.getColumnIndex("number"));                    sb.append("id:" + uId + "    name:" + uName + "    number:" + uNumber + "\n");                }                tv_info.setText(sb.toString());                cursor.close();            }            break;        case 1:// 插入一条数据            uri = Uri.parse("content://" + authority + "/insert");            values.put("id"new Random().nextInt(10));            values.put("name""bqt");            values.put("number""10086");            returnUri = resolver.insert(uri, values);            tv_info.setText("插入信息的uri:" + returnUri.toString());            break;        case 2: // 修改一条数据            uri = Uri.parse("content://" + authority + "/update");            values.put("name""dog");            values.put("number""10087");            num = resolver.update(uri, values, "name=?"new String[] { "bqt" });// 指定uri,values,Where子句,占位符的值            tv_info.setText("修改信息个数:" + num);            break;        case 3: // 删除一条数据            uri = Uri.parse("content://" + authority + "/delete");            num = resolver.delete(uri, "name=?"new String[] { "bqt" });            tv_info.setText("删除信息个数:" + num);            break;        case 4: // 清空,删除所有数据            uri = Uri.parse("content://" + authority + "/delete");            num = resolver.delete(uri, nullnull);            tv_info.setText("删除信息个数:" + num);            break;        //******************************************************************************************        case 5: // 读取收件箱信息            readMsgs();            break;        case 6: // 往收件箱插入一条信息            insertMsg();            break;        case 7: // 读取手机联系人            readContact();            break;        case 8: // 查询指定电话的联系人信息            queryContact("110");            break;        case 9: // 添加一个新的联系人            writeContact();            break;        }    }
    /** 读取收件箱信息。<uses-permission android:name="android.permission.READ_SMS"/> */    public void readMsgs() {        Uri uri = Uri.parse("content://sms/");        ContentResolver resolver = getContentResolver();        //获取的是哪些列的信息        Cursor cursor = resolver.query(uri, new String[] { "address""date""type""body" }, nullnullnull);        if (cursor != null) {            StringBuffer sb = new StringBuffer();            while (cursor.moveToNext()) {                sb.append("联系人:" + cursor.getString(cursor.getColumnIndex("address")));                sb.append("\n时间:" + cursor.getString(cursor.getColumnIndex("date")));                sb.append("\n类型:" + cursor.getString(cursor.getColumnIndex("type")));                sb.append("\n内容:" + cursor.getString(cursor.getColumnIndex("body")));                sb.append("\n===============================\n");            }            tv_info.setText(sb.toString());            cursor.close();        }    }    /**读取手机收件箱,返回一个集合*/    public ArrayList<String> getSms() {        ArrayList<String> mArrayList = new ArrayList<String>();        ContentResolver resolver = getContentResolver();        Uri uri = Uri.parse("content://sms/");        Cursor cursor = resolver.query(uri, new String[] { "body""address""type""date" }, nullnullnull);        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());        while (cursor.moveToNext()) {            String body = "内容:" + cursor.getString(0);            String address = "联系人:" + cursor.getString(1);            String type = "类型:" + cursor.getString(2);//1是接收到的,2是已发出 ,但是 3 是什么鬼?            String date = "时间:" + formatter.format(new Date(Long.parseLong(cursor.getString(3))));            mArrayList.add(new String(body + "\n" + address + "\n" + type + "\n" + date + "\n\n"));        }        cursor.close();        return mArrayList;    }    /** 往收件箱插入一条信息,"android.permission.WRITE_SMS" 。从5.0开始,默认短信应用外的软件不能以写入短信数据库的形式发短信 */    public void insertMsg() {        ContentValues values = new ContentValues();        values.put("address""10086");//联系人        values.put("type", 1);//类型1是"收到"的短信        values.put("date", System.currentTimeMillis());//收到的时间        values.put("body""您的余额还有1,000,000万元!");//内容        Uri returnUri = resolver.insert(Uri.parse("content://sms"), values);        if (returnUri != null) {            tv_info.setText(returnUri.toString());            if (returnUri.getPath().equals("/0")) {                Toast.makeText(this"添加失败:" + returnUri.getPath(), Toast.LENGTH_SHORT).show();            } else {                Toast.makeText(this"添加成功:" + returnUri.getPath(), Toast.LENGTH_SHORT).show();            }        }    }
    /** 读取手机联系人 <uses-permission android:name="android.permission.READ_CONTACTS"/> */    public void readContact() {        //查询raw_contacts表获得联系人的id        ContentResolver resolver = getContentResolver();        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;        //查询联系人数据        Cursor cursor = resolver.query(uri, nullnullnullnull);        if (cursor != null) {            StringBuffer sb = new StringBuffer();            while (cursor.moveToNext()) {                sb.append("姓名:" + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));                sb.append("\n号码:" + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));                sb.append("\n===============================\n");            }            tv_info.setText(sb.toString());            cursor.close();        }        cursor.close();    }    /**查询指定电话的联系人信息*/    public void queryContact(String number) {        Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);        ContentResolver resolver = getContentResolver();        Cursor cursor = resolver.query(uri, new String[] { "display_name" }, nullnullnull);        if (cursor != null) {            if (cursor.moveToFirst()) {                String name = cursor.getString(0);                Toast.makeText(this, number + "对应的联系人名称:" + name, Toast.LENGTH_SHORT).show();            } else {                Toast.makeText(this, number + "木有此联系人", Toast.LENGTH_SHORT).show();            }            cursor.close();        }    }    /**读取手机联系人,返回一个集合*/    public List<Map<String, String>> getContacts() {        //把所有的联系人保存在List集合中        List<Map<String, String>> list = new ArrayList<Map<String, String>>();        ContentResolver resolver = getContentResolver();        Uri uriId = Uri.parse("content://com.android.contacts/raw_contacts");//id信息        Uri uriData = Uri.parse("content://com.android.contacts/data");//具体的联系人信息        //获取包含id的结果集        Cursor cursor = resolver.query(uriId, new String[] { "contact_id" }, nullnullnull);        //遍历此包含id的结果集        while (cursor.moveToNext()) {            String contact_id = cursor.getString(0);            if (contact_id != null) {                //将对应此id的所有联系人信息保存在map集合中                Map<String, String> map = new HashMap<String, String>();                Cursor dataCursor = resolver.query(uriData, new String[] { "data1""mimetype" }, "contact_id=?"new String[] { contact_id }, null);                //遍历对应此id的所有联系人信息的结果集                while (dataCursor.moveToNext()) {                    String data1 = dataCursor.getString(0);//联系人信息                    String mimetype = dataCursor.getString(1);//此联系人信息的类型                    //若mimetype为联系人的姓名或电话号码,则以相应的格式保存在map集合中                    if ("vnd.android.cursor.item/name".equals(mimetype)) map.put("name", data1);//保存姓名                    else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) map.put("phone", data1);//保存电话                }                //将map集合中的数据保存在list集合中                list.add(map);                dataCursor.close();            }        }        cursor.close();        return list;    }    /**添加一个新的联系人。"android.permission.WRITE_CONTACTS" */    public void writeContact() {        ContentResolver resolver = getContentResolver();        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//保存联系人的id        Uri dataUri = Uri.parse("content://com.android.contacts/data");//保存联系人的数据        Cursor cursor = resolver.query(uri, new String[] { "_id" }, nullnullnull);// 注意列名是【_id】        if (cursor.moveToLast()) {// 移动到最后一条记录            int lastId = cursor.getInt(0);// 获取最后一条记录【第零列】的值(即id的值)            int newId = lastId + 1;// 设定要插入的记录的id值            ContentValues values = new ContentValues();            values.put("contact_id", newId);//插入一条记录            resolver.insert(uri, values);// 向raw_contacts表中插入一条记录            //电话            ContentValues phoneValues = new ContentValues();            phoneValues.put("data1""110");//向data1表中插入一条指定的值(电话)            phoneValues.put("mimetype""vnd.android.cursor.item/phone_v2");//指定这个值是一个电话类型            phoneValues.put("raw_contact_id", newId);//指定这个值(电话)对应哪个id            resolver.insert(dataUri, phoneValues);            //emai            ContentValues emaiValues = new ContentValues();            emaiValues.put("data1""bqt@qq.com");            emaiValues.put("mimetype"

人气教程排行