zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    STL——pair
    STL——stack
    Python学习之编程基础
    开学第一课,课课有总结
    DNS域名解析
    FTP文件传输服务
    DHCP原理及配置
    Linux中配置网卡
    indoe与block解析
    Linux系统安全管理
  • 原文地址:https://www.cnblogs.com/Miami/p/3138458.html
Copyright © 2011-2022 走看看