android14

【用ContentResolver操作ContentProvider中的数据】

当外部应用需要对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.providers.personprovider/person/10”),那么将会对主机名为cn.itcast.providers.personprovider的ContentProvider进行操作,操作的数据为person表中id为10的记录。

//--------------------------------------------------

使用ContentResolver对ContentProvider中的数据进行添加、删除、修改和查询操作:
ContentResolver resolver =  getContentResolver();
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person");
//添加一条记录
ContentValues values = new ContentValues();
values.put("name", "itcast");
values.put("age", 25);
resolver.insert(uri, values);  
//获取person表中所有记录
Cursor cursor = resolver.query(uri, null, null, null, "personid desc");
while(cursor.moveToNext()){
 Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1));
}
//把id为1的记录的name字段值更改新为liming
ContentValues updateValues = new ContentValues();
updateValues.put("name", "liming");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);
//删除id为2的记录
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);

//-------------------------------------------------

  1 package cn.itcast.db;
  2 
  3 import android.content.ContentProvider;
  4 import cn.itcast.service.DBOpenHelper;
  5 import android.content.ContentUris;
  6 import android.content.ContentValues;
  7 import android.content.UriMatcher;
  8 import android.database.Cursor;
  9 import android.database.sqlite.SQLiteDatabase;
 10 import android.net.Uri;
 11 
 12 public class PersonProvider extends ContentProvider {
 13     private DBOpenHelper dbOpenHelper;
 14     private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
 15     private static final int PERSONS = 1;
 16     private static final int PERSON = 2;
 17     static{
 18         MATCHER.addURI("cn.itcast.providers.personprovider", "person", PERSONS);
 19         MATCHER.addURI("cn.itcast.providers.personprovider", "person/#", PERSON);
 20     }
 21     @Override
 22     public boolean onCreate() {
 23         dbOpenHelper = new DBOpenHelper(this.getContext());
 24         return true;
 25     }
 26 
 27     @Override
 28     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
 29         SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
 30         switch (MATCHER.match(uri)) {
 31         case PERSONS:
 32             return db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
 33 
 34         case PERSON:
 35             long rowid = ContentUris.parseId(uri);
 36             String where = "personid="+ rowid;
 37             if(selection!=null && !"".equals(selection.trim())){
 38                 where += " and "+ selection;
 39             }
 40             return db.query("person", projection, where, selectionArgs, null, null, sortOrder);
 41         default:
 42             throw new IllegalArgumentException("this is Unknown Uri:"+ uri);
 43         }
 44     }
 45 
 46     @Override
 47     public String getType(Uri uri) {
 48         switch (MATCHER.match(uri)) {
 49         case PERSONS:
 50             return "vnd.android.cursor.dir/person";
 51         case PERSON:
 52             return "vnd.android.cursor.item/person";
 53         default:
 54             throw new IllegalArgumentException("this is Unknown Uri:"+ uri);
 55         }
 56     }
 57 
 58     @Override
 59     public Uri insert(Uri uri, ContentValues values) {
 60         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
 61         switch (MATCHER.match(uri)) {
 62         case PERSONS:
 63             long rowid = db.insert("person", "name", values);//主键值
 64             //  content://cn.itcast.provides.personprovider/person/10
 65             Uri insertUri = ContentUris.withAppendedId(uri, rowid);
 66             this.getContext().getContentResolver().notifyChange(uri, null);//发出数据变化通知
 67             return insertUri;
 68 
 69         default:
 70             throw new IllegalArgumentException("this is Unknown Uri:"+ uri);
 71         }
 72     }
 73 
 74     @Override
 75     public int delete(Uri uri, String selection, String[] selectionArgs) {
 76         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
 77         int num = 0;
 78         switch (MATCHER.match(uri)) {
 79         case PERSONS:
 80             num = db.delete("person", selection, selectionArgs);
 81             break;
 82         case PERSON:
 83             long rowid = ContentUris.parseId(uri);
 84             String where = "personid="+ rowid;
 85             if(selection!=null && !"".equals(selection.trim())){
 86                 where += " and "+ selection;
 87             }
 88             num = db.delete("person", where, selectionArgs);
 89             break;
 90         default:
 91             throw new IllegalArgumentException("this is Unknown Uri:"+ uri);
 92         }
 93         return num;
 94     }
 95 
 96     @Override
 97     public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
 98         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
 99         int num = 0;
100         switch (MATCHER.match(uri)) {
101         case PERSONS:
102             num = db.update("person", values, selection, selectionArgs);
103             break;
104         case PERSON:
105             long rowid = ContentUris.parseId(uri);
106             String where = "personid="+ rowid;
107             if(selection!=null && !"".equals(selection.trim())){
108                 where += " and "+ selection;
109             }
110             num = db.update("person", values, where, selectionArgs);
111             break;
112         default:
113             throw new IllegalArgumentException("this is Unknown Uri:"+ uri);
114         }
115         return num;
116     }
117 
118 }
View Code
 1 package cn.itcast.test;
 2 
 3 import android.content.ContentResolver;
 4 import android.content.ContentValues;
 5 import android.database.Cursor;
 6 import android.net.Uri;
 7 import android.test.AndroidTestCase;
 8 import android.util.Log;
 9 
10 public class AccessContentProviderTest extends AndroidTestCase {
11     private static final String TAG = "AccessContentProviderTest";
12     
13     public void testInsert() throws Exception{                                       
14         Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person");
15         ContentResolver resolver = this.getContext().getContentResolver();
16         ContentValues values = new ContentValues();
17         values.put("name", "laoli");
18         values.put("phone", "1860103838383");
19         values.put("amount", "50000000000");
20         resolver.insert(uri, values);
21     }
22     
23     public void testDelete() throws Exception{
24         Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person/20");
25         ContentResolver resolver = this.getContext().getContentResolver();
26         resolver.delete(uri, null, null);
27     }
28     
29     public void testUpdate() throws Exception{
30         Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person/1");
31         ContentResolver resolver = this.getContext().getContentResolver();
32         ContentValues values = new ContentValues();
33         values.put("name", "zhangxiaoxiaolove");
34         resolver.update(uri, values, null, null);
35     }
36     
37     public void testQuery() throws Exception{
38         Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person");
39         ContentResolver resolver = this.getContext().getContentResolver();
40         Cursor cursor = resolver.query(uri, null, null, null, "personid asc");
41         while(cursor.moveToNext()){
42             String name = cursor.getString(cursor.getColumnIndex("name"));
43             Log.i(TAG, name);
44         }
45         cursor.close();
46     }
47 }
View Code
原文地址:https://www.cnblogs.com/Miami/p/3138458.html