• 内容提供者


    要完成一个内容提供者你需要遵循以下步骤:
    1. extends ConcentePrivoder
    2. 提供一个数据库的连接工具类MySQLiteHelper
    3. 定义我们的主号码和分机号

    代码中有Perosn的bean类没写出来,自定义的数据库里面含有person表

    这篇代码提供了对自定义的一个SQLite数据库的表person中增删改查

    public class PersonContentPrivoder extends ContentProvider
    {
      private MySQLLiteHelper helper = null;

      //uriMatcher 工厂
      private static UriMatcher uriMatcher = null;
      private static final String AURHORITH = "包名.类名"; // 这个就是主号码

      private static final int PERSON_INSERT_CODE = 0;
      private static final int PERSON_UPDATE_CODE = 1;
      private static final int PERSON_DELETE_CODE = 2;
      private static final int PERSON_QUERY_CODE = 3;

      static{
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);//参数就是分机号

        //添加插入的分机号
        //访问地址:content://包名.类名/person/insert
        uriMatcher.addURI(AURHORITH, "person/insert", PERSON_INSERT_CODE);

        //更新插入的分机号
        //访问地址:content://包名.类名/person/update
        uriMatcher.addURI(AURHORITH, "person/update", PERSON_UPDATE_CODE);

        //删除的分机号
        //访问地址:content://包名.类名/person/delete
        uriMatcher.addURI(AURHORITH, "person/delete", PERSON_DELETE_CODE);

        //查询的分机号
        //访问地址:content://包名.类名/person/query
        uriMatcher.addURI(AURHORITH, "person/query", PERSON_QUERY_CODE);
      }

      //在内容提供者创建的时候初始化我们的数据库工具类
      @Override
      public boolean onCreate() {

        helper = new MySQLiteHelper(getContext(), null, null, -1);//自定义的一个数据库工具类,以及在工具类里面写死了名字和版本号

        return false;
      }

      @Override
      public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {

        switch (uriMatcher.match(uri)) {
          case PERSON_QUERY_CODE:

            SQLiteDatabase db = helper.getWritableDatabase();

            if(db.isOpen())
            {
               Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
      
               // db.close(); // 不能关掉数据库否者访问不到数据

               return cursor;
            }
      
            break;

          default:
            throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
          }
        return null;
      }

      //由系统调用,所以我们一般不会重写他
      @Override
      public String getType(Uri uri) {
        return null;
      }

      //inert方法提供真实的服务
      @Override
      public Uri insert(Uri uri, ContentValues values) {
        //访问地址:content://包名.类名/person/query
        //返回一个uri类型的数据 一般我们就将就访问地址,然后在地址后面追加添加成功以后返回的id

        switch (uriMatcher.match(uri)) {
        case PERSON_INSERT_CODE:

          SQLiteDatabase db = helper.getWritableDatabase();

          if(db.isOpen())
          {
            long id = db.insert("person", null, values);
            db.close();

            return ContentUris.withAppendedId(uri, id);
          }

          break;

        default:
          throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
        }

        return null;
      }

      @Override
      public int delete(Uri uri, String selection, String[] selectionArgs) {

      switch (uriMatcher.match(uri)) {
        case PERSON_DELETE_CODE:

        SQLiteDatabase db = helper.getWritableDatabase();

        if(db.isOpen())
        {
          int id = db.delete("person", selection, selectionArgs);
          db.close();

          return id;
        }
         break;
        default:
          throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
        }

        return 0;
      }

      @Override
      public int update(Uri uri, ContentValues values, String selection,
      String[] selectionArgs) {

        switch (uriMatcher.match(uri)) {
          case PERSON_UPDATE_CODE:

            SQLiteDatabase db = helper.getWritableDatabase();

            if(db.isOpen())
            {
              int id = db.update("person", values, selection, selectionArgs);
              db.close();

              return id;
            }
            break;
          default:
          throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
        }
        return 0;
      }

    }

    <!-- xml中定义权限 -->
    <permission
      android:name="aaa.bbb.ccc"
    ></permission>
    <permission
      android:name="aaa.bbb.ccc.ddd"
    ></permission>

    <!-- 写contentpriverder 必须要在主xml文件中application里面申明 -->
    <provider
      android:name="包名.类名"
      android:authorities="包名.类名“
      android:readPermission="aaa.bbb.ccc"//自定义的权限
      android:writePermission="aaa.bbb.ccc.ddd"
    ></provider>

     

  • 相关阅读:
    SpringBoot整合Ehcache
    SpringCache整合Redis
    SpringBoot使用mongo搭建RESTful风格
    SpringBoot使用JPA搭建RESTful风格
    SpringBoot操作mongo的两种方法
    Nginx负载均衡
    【Java杂货铺】用Security做权限极简入门
    【Java杂货铺】JVM#虚拟机加载机制
    【Java杂货铺】JVM#Class类结构
    【Java杂货铺】JVM#Java高墙之GC与内存分配策略
  • 原文地址:https://www.cnblogs.com/zzw1994/p/4910279.html
Copyright © 2020-2023  润新知