• ContentProvider


    ContentProvider是Android实现跨程序共享数据的标准方式。不同于文件储存和SharedPreferences存储中的两种全局可读写操作模式,ContentProvider可以选择只对哪一部分数据进行共享,从而保证我们程序中的隐私数据不会有泄露的风险。

    创建

    通过新建一个类去继承ContentProvider的方式来创建自己的ContentProvider,使用子类继承的时候,需要将以下六个方法重写。

    public class MyProvider extends ContentProvider {
    
        public static final int TABLE1_DIR = 0;
        public static final int TABLE1_ITEM = 1;
        public static final int TABLE2_DIR = 2;
        public static final int TABLE2_ITEM = 3;
    
        private static UriMatcher uriMatcher;
    
        static {
            uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
            uriMatcher.addURI("com.example.contacttest.provider", "table1", TABLE1_DIR);
            uriMatcher.addURI("com.example.contacttest.provider", "table/#", TABLE1_ITEM);
            uriMatcher.addURI("com.example.contacttest.provider", "table2", TABLE2_DIR);
            uriMatcher.addURI("com.example.contacttest.provider", "table/#", TABLE2_ITEM);
        }
    
        //初始化内容提供器的时候调用,通常在这边完成数据库的创建和升级等操作
        @Override
        public boolean onCreate() {
            //返回true表示内容提供器初始化成功,返回false表示失败
            return false;
        }
    
        @Nullable    
        @Override
        public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {                       
            return null;               
        }                              
                                       
        @Nullable
        @Override
        public String getType(@NonNull Uri uri) {
            switch (uriMatcher.match(uri)) {
                case TABLE1_DIR:
                    return "vnd.android.cursor.dir/vnd.com.example.contacttest.provider.table1";
                case TABLE1_ITEM:
                    return "vnd.android.cursor.item/vnd.com.example.contacttest.provider.table1";
                case TABLE2_DIR:
                    return "vnd.android.cursor.dir/vnd.com.example.contacttest.provider.table2";
                case TABLE2_ITEM:
                    return "vnd.android.cursor.item/vnd.com.example.contacttest.provider.table2";
            }
            return null;
        }
    
        @Nullable
        @Override
        public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
            return null;
        }
    
        @Override
        public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
            return 0;
        }
    
        @Override
        public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
            return 0;
        }
    }
    

    重点讲一下getType(),这个方法用于获取Uri对象所对应的MIME类型。一个内容URl对象对应的MIME类型字符串主要由三部分组成,Android对这三个部分做了如下格式规定:

    1. 必须以vnd开头
    2. 如果内容URl以路径结尾,则后接android.cursor.dir/,如果内容URl以id结尾,则后接android.cursor.item/
    3. 最后接vnd.authority.path
  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/ngy-liupeng/p/15170797.html
Copyright © 2020-2023  润新知