学习ContentResolver

当外部应用要对ContentProvider中的数据进行操作的时候,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用activity的getContentResolver方法。

contentResolver类提供了与contentProvider相同签名的四个方法
public Uri insert(URI uri,ContentValues values); 这个方法用于添加数据
public int delete(Uri  uri,String selection,String[] selectionArgs) 这个方法用于删除数据
public int update(Uri uri,ContentValues values,String selection,Stringp[] selectionArgs) 更新方法


下面用查询方法详细举例

public class PersonProvider extends ContentProvider {
    private static final String TAG = "PersonContentProvider";
    DBOpenHelper dbHelper;
  
    private static final int PERSONLIST = 1;
  
    private static final int PERSON = 2;
    private static UriMatcher matcher;
    static{
       matcher = new UriMatcher(UriMatcher.NO_MATCH);
       matcher.addURI("cn.itcast.provider.PersonProvider", "person", PERSONLIST);
       matcher.addURI("cn.itcast.provider.PersonProvider", "person/#", PERSON);
    }


    @Override
    public String getType(Uri uri) {
       switch (matcher.match(uri)) {
           case PERSONLIST://获取所有记录  就是这样规定的 多条记录返回这个
              return "vnd.android.cursor.dir/personprovider.person";
           case PERSON://获取单条记录  单条记录返回那个
              return "vnd.android.cursor.item/personprovider.person";
           default:
              throw new IllegalArgumentException("Uri IllegalArgument:"+ uri);
       }
    }



    @Override
    public boolean onCreate() {
       dbHelper = new DBOpenHelper(this.getContext());
       return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
       //获取数据库操作的类
       SQLiteDatabase db = dbHelper.getReadableDatabase();
       //声明一个游标
       Cursor cursor = null;
       switch (matcher.match(uri)) {
           case PERSONLIST://获取所有记录
              //cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
              cursor = db.rawQuery("select * from person ", null);
              break;
           case PERSON://获取单条记录
              long personid = ContentUris.parseId(uri);
              String where = selection!=null && !"".equals(selection.trim()) ? selection+ " and personid="+ personid : "personid="+ personid;
              cursor = db.query("person", projection, where, selectionArgs, null, null, sortOrder);
              break;
           default:
              //如果什么都没有找到,就抛出一个异常。
              throw new IllegalArgumentException("Uri IllegalArgument:"+ uri);
       }
       //这里还有一个悬而未决的问题,就是如果这里关闭了数据库的话,外面想查找这些数据时没法完成的,所以数据库打开后就一直没有关闭,个人认为也没什么影响,手机毕竟是单机操作,而且数据库性能很好,多开个东西没关系的。
       //db.close();
       return cursor;
    }

你可能感兴趣的:(android)