• 内容提供者编写步骤


    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))");  
       }
    }  
    
  • 相关阅读:
    HTML-DOM实例——实现带样式的表单验证
    HTML-DOM常用对象的用法(select/option/form/table)
    C++程序嵌入Python解释器二次开发
    线程池、协程
    Qt信号(SINGAL)与槽(SLOT)
    随机数
    字符串、内存拷贝
    模板元编程以及关键字template和typename
    std::thread,std::future,std::promise,std::async
    C++智能指针,RAII(资源获取即初始化) 原则
  • 原文地址:https://www.cnblogs.com/loaderman/p/6420983.html
Copyright © 2020-2023  润新知