zoukankan      html  css  js  c++  java
  • 内容提供者编写步骤

    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))");  
       }
    }  
    
  • 相关阅读:
    Longest Consecutive Sequence 分类: Leetcode(线性表) 2015-02-04 09:54 55人阅读 评论(0) 收藏
    Median of Two Sorted Arrays 分类: Leetcode(线性表) 2015-02-04 09:05 54人阅读 评论(0) 收藏
    Python+Scrapy(完整包全安装过程) 分类: 安装配置说明 2015-02-02 21:29 108人阅读 评论(0) 收藏
    Remove Element 分类: Leetcode(线性表) 2015-01-29 10:47 55人阅读 评论(0) 收藏
    Search in Rotated Sorted Array 分类: Leetcode(线性表) 2015-01-29 10:23 58人阅读 评论(0) 收藏
    机器学习基础(四)LMS,代价函数的求解和概率意义 分类: 机器学习 2015-01-26 14:52 114人阅读 评论(0) 收藏
    机器学习基础(一)线性回归
    AcWing1341. 十三号星期五
    JavaWebServle执行流程解析
    AcWing 466. 回文日期
  • 原文地址:https://www.cnblogs.com/loaderman/p/6420983.html
Copyright © 2011-2022 走看看