zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    CF-478C
    HDU-2074-叠筐
    HDU-2037-今年暑假不AC
    POJ-2785-4 Values whose Sum is 0
    HDU-1160-FatMouse's Speed
    HDU-1297-Children’s Queue
    Redis客户端管理工具的安装及使用
    Redis客户端管理工具,状态监控工具
    memcached可视化客户端工具
    javascript回调函数
  • 原文地址:https://www.cnblogs.com/ngy-liupeng/p/15170797.html
Copyright © 2011-2022 走看看