内容提供者编写步骤

1. 写一个类继承系统的ContentProvider

2. 在清单文件中注册

    <provider
            android:name="com.example.bank.BankProvider"
            android:authorities="tian.wang.gai.di.hu" >
    </provider>

 

3. 暗号 URI

     static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
      static{
           //添加URI的匹配规则
           matcher.addURI("tian.wang.gai.di.hu", "bao.ta.zhen.he.yao",URI_SUCC);
      }

 

4. 实现数据的增删改查的操作

 

package com.example.bank;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
/**
 * 1. 写一个类继承系统的ContentProvider
 * 
 * 数据库管理员
 *  双面间谍 
 */
public class BankProvider extends ContentProvider {
   private static final int URI_SUCC = 0;
   private static final int URI_SUCC_QUERY  = 1;
   private static final int URI_SUCC_ACCOUNT   = 2;
   private static final int URI_SUCC_BALC   = 3;
   private BankDbOpenHelper helper;
   private SQLiteDatabase   db;
  //3. 暗号  URI
   static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
   static{
      //添加URI的匹配规则
      matcher.addURI("tian.wang.gai.di.hu", "bao.ta.zhen.he.yao",URI_SUCC);    
      //添加URI的匹配规则   用方法名  query
      matcher.addURI("tian.wang.gai.di.hu", "query",URI_SUCC_QUERY);    
      //添加URI的匹配规则   用方法名  account 表名  推荐使用
      matcher.addURI("tian.wang.gai.di.hu", "account",URI_SUCC_ACCOUNT);
      //添加URI的匹配规则   用方法名  black 表名  推荐使用
      matcher.addURI("tian.wang.gai.di.hu", "black",URI_SUCC_BALC);
      //添加URI的匹配规则   用方法名  account/2
      matcher.addURI("tian.wang.gai.di.hu", "account/2",URI_SUCC_ACCOUNT);
/添加URI的匹配规则   用方法名  account/#
      matcher.addURI("tian.wang.gai.di.hu", "account/#",URI_SUCC_ACCOUNT);
  }
   @Override
   public boolean onCreate() {
      helper = new BankDbOpenHelper(getContext());
      db = helper.getWritableDatabase();
      return false;
   }
   @Override
   public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {
      int code = matcher.match(uri);
      if (code == URI_SUCC_QUERY) {
         Cursor cursor = db.query("account", projection, selection, selectionArgs, null, null, sortOrder);     
         //发出通知
         getContext().getContentResolver().notifyChange(uri, null);
         return cursor;
      }else if(code == URI_SUCC_BALC){
         Cursor cursor = db.query("black", projection, selection, selectionArgs, null, null, sortOrder);
         return cursor;
      }else {
         throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;  
      }
   }
   /**
    *  vnd.android.cursor.item 单行数据
      vnd.android.cursor.dir/ 多行数据库
    */
   @Override
   public String getType(Uri uri) {
      return null;
   }
/**
    * 4. 实现增的方法
    * 
    * content://tian.wang.gai.di.hu/bao.ta.zhen.he.yao
    * 
    */
   @Override
   public Uri insert(Uri uri, ContentValues values) {
      int code = matcher.match(uri);
      if (code == URI_SUCC) {
         //行长操作的数据库
         long id = db.insert("account", null, values);
         //发出通知
         getContext().getContentResolver().notifyChange(uri, null);
         return Uri.parse("id:"+id);
      }else if(code == URI_SUCC_BALC){
         long id = db.insert("black", null, values);
         return Uri.parse("id:"+id);
      }else {
         throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;  
      }
   }
   @Override
   public int delete(Uri uri, String selection, String[] selectionArgs) {
      int code = matcher.match(uri);
      if (code == URI_SUCC_ACCOUNT) {
         int id = db.delete("account", selection, selectionArgs);
         //发出通知
         getContext().getContentResolver().notifyChange(uri, null);
         return id;
      }else if(code == URI_SUCC_BALC){
         int id = db.delete("black", selection, selectionArgs);
         return id;
      }else {
         throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;  
      }
   }
   @Override
public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {
      int code = matcher.match(uri);
      if (code == URI_SUCC_ACCOUNT) {
         int id = db.update("account", values, selection, selectionArgs);
         //发出通知
         getContext().getContentResolver().notifyChange(uri, null);
         return id;
      }else if(code == URI_SUCC_BALC){
         int id = db.update("black", values, selection, selectionArgs);
         return id;
      }else {
         throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;  
      }
   } 
}

package com.example.bank;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class BankDbOpenHelper extends SQLiteOpenHelper {
   /**
    * 构造方法
    * 
    * @param context
    *            上下文
    * @param name
    *            数据库的名称
    * @param factory
    *            游标工厂 null
    * @param version
    *            数据库的版本号 >= 1
    */

   public BankDbOpenHelper(Context context) {
      super(context,"bank.db",null,2);
   }
   /**
    * 第一次创建数据库的时候调用
    * 适合做一些初始化的事情
    */
   @Override
   public void onCreate(SQLiteDatabase db) {
      db.execSQL("create table account(_id integer primary key autoincrement,name varchar(20),money varchar(20))");
   }

   /**
    * 升级数据库的时候调用
    */
   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      db.execSQL("create table black(_id integer primary key autoincrement,name varchar(20),money varchar(20))");  
   }
}  

 

posted on 2017-02-20 19:15  LoaderMan  阅读(354)  评论(0编辑  收藏  举报

导航