ContentProvider和ContentResolver永远是相对的,本章主要是讲ContentResolver的使用,当然是在android系统提供ContentProvider的情况下。
ContentProvider与ContentResolver概念上的东西的就不讲了,主要讲一下ContentResolver的作用以及使用方法。
ContentResolver的作用:
1、可以通过ContentResolver来获取android内部的数据,比如联系人信息、系统的多媒体信息、短信信息等等。
2、可以获取提供了ContentProvider的应用的数据。
ContentResolver的使用方法:(参考《疯狂Android讲义第三版》446面)
1、调用Context的getContentResolver()获取ContentResolver对象。
2、根据需要调用ContentResolver的insert(),delete(),updata(),query方法操作数据库。
3、为了操作系统提供的ContentResolver,需要了解该ContentProvider的Uri,以及该ContentProvider所操作的数据列的列名,可以通过查阅Android官方文档来获取这些信息。
4、使用时牢记不要忘记在AndroidManifest中添加权限,并且要及时close掉curcor。
笔者个人意见:
1、建议新手读者在学完SqLite之后再来学习ContentResolver的内容,ContentResolver的insert(),delete(),updata(),query四个操作数据库的方法均与SQLite中的相同。
2、ContentProvider的Uri,以及该ContentProvider所操作的数据列的列名都不需要死记硬背,需要用的时候查阅一下即可,新手此处最好能自己全部写一下,对ContentResolver的使用有一个总体的了解。
笔者demo效果:(源码在文章结尾)
代码截图:
在demo中用到的ContentProvider的两个Uri如下:
管理联系人的Uri。
ContactsContract.Contacts.CONTENT_URI
管理联系人电话的Uri。
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
AndroidManifest:
MainActivity:
package com.example.double2.mcontentprovider;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button btnShow;
private Button btnAdd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnShow=(Button)findViewById(R.id.btn_show);
//点击后跳转到ShowActivity
btnShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToShowActivity();
}
});
btnAdd=(Button)findViewById(R.id.btn_add);
//点击后跳出添加信息的dialog
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showAddDialog();
}
});
}
private void showAddDialog() {
View dialog_add=getLayoutInflater().inflate(R.layout.dialog_add, null);
final EditText etName=(EditText)dialog_add.findViewById(R.id.et_name);
final EditText etPhone=(EditText)dialog_add.findViewById(R.id.et_phone);
//初始化dialog
AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("添加联系人")
.setView(dialog_add)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String mName=etName.getText().toString();
String mPhone=etPhone.getText().toString();
if(mName.equals("")||mPhone.equals(""))
Toast.makeText(MainActivity.this, "联系人姓名或电话不能为空", Toast.LENGTH_SHORT).show();
else
addMyContact(mName,mPhone);
}
})
.setNegativeButton("取消",null)
.create()
.show();
}
private void addMyContact(String mName, String mPhone) {
//创建一个空的ContentValues
ContentValues values=new ContentValues();
//向ContactsContract.RawContacts.CONTENT_URI执行一个空值插入
//目的是获取系统返货的rawContactId,以便添加联系人名字和电话使用同一个id
Uri rawContactUri=getContentResolver().insert(
ContactsContract.RawContacts.CONTENT_URI,values);
long rawContactId= ContentUris.parseId(rawContactUri);
//清空values
//设置id
//设置内容类型
//设置联系人姓名
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, mName);
//向联系人URI添加联系人姓名
getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
//清空values
//设置id
//设置内容类型
//设置联系人电话
//设置电话类型
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,mPhone);
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
//使用toast提示用户信息添加成功
Toast.makeText(MainActivity.this, "联系人数据添加成功!", Toast.LENGTH_SHORT).show();
}
private void ToShowActivity() {
Intent intent=new Intent(MainActivity.this,ShowActivity.class);
startActivity(intent);
}
}
ShowActivity:
package com.example.double2.mcontentprovider;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Double2号 on 2016/4/6.
*/
public class ShowActivity extends Activity {
ListView lvContacts;
List
activity_main:
activity_show:
dialog_add:
item_list:
源码地址:http://download.csdn.net/detail/double2hao/9483388