当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成
要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。
ContentResolver 类提供了与ContentProvider类相同签名的四个方法:
- public Uri insert(Uri uri, ContentValues values)该方法用于往ContentProvider添加数据。
- public int delete(Uri uri, String selection, String[] selectionArgs)该方法用于从ContentProvider删除数据。
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)该方法用于更新ContentProvider中的数据。
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)该方法用于从ContentProvider中获取数据。
这些方法的第一个参数为Uri,代表要操作的是哪个ContentProvider和对其中的什么数据进行操作,假设给定的是
Uri.parse(“content://cn.itcast.provider.personprovider/person/10”)那么将会对主机名为cn.itcast.provider.personprovider的ContentProvider进行操作,操作的数据为person表中id为10的记录。
使用ContentResolver对ContentProvider中的数据进行添加、删除、修改和查询操作:
- 创建内容解析器对象 ContentResolver
- 定义URI
- 进行增删改查方法
具体事例:
实现:对上一个项目的共享进行查询并在listview中显示
实现效果如下:
MainActivity.java
package com.example.android_provider;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView lv_user;
// 内容解析器
private ContentResolver contentResolver;
// 操作的标志
private static final String AUTHORITIE = "www.csdn.com.provider.userContentProvider";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 模型层
// 创建内容解析器对象
contentResolver = getContentResolver();
// 控制层
Cursor c = contentResolver.query(
Uri.parse("content://" + AUTHORITIE + "/query"), new String[] {
"userid as _id", "username", "userphone" }, null, null,
null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.list_item_user, c, new String[] { "username",
"userphone" },
new int[] { R.id.tv_name, R.id.tv_phone },
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
// 视图层
lv_user = (ListView) findViewById(R.id.listView1);
lv_user.setAdapter(adapter);
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarStyle="outsideInset"
>
</ListView>
</RelativeLayout>
list_item_user.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/btn_delete"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:background="@drawable/del"
android:onClick="delete" />
<Button
android:id="@+id/btn_update"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/btn_delete"
android:onClick="update"
android:layout_margin="5dp"
android:background="@drawable/refresh" />
<TextView
android:id="@+id/tv_name"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btn_update"
android:layout_alignBottom="@+id/btn_update"
android:layout_alignParentLeft="true"
android:paddingLeft="10dp"
android:text="TextView"
/>
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tv_name"
android:layout_toRightOf="@+id/tv_name"
android:paddingLeft="10dp"
android:text="TextView" />
</RelativeLayout>