ContactsProvider的使用

这个东西就是Android用来共享数据的,没啥太多的东西,我也只会用,简单的了解了下原理跟使用

先上个代码

public class ContactsProvider extends ContentProvider {

    //主机地址   当前类的完整路径
    public static final String AUTHORITIES = "com.yide.yide.provider.ContactsProvider";//ContentProvider.class.getCanonicalName();
    //地址匹配对象
    static UriMatcher mUriMatcher;
    public static final int CONTACT = 1;
    //对应联系人表的uri常量AUTHORITIES
    public static Uri URI_CONTACT = Uri.parse("content://"+AUTHORITIES+"/contact");
    static {
        mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        //添加一个匹配的规则
        mUriMatcher.addURI(AUTHORITIES,"/contact",CONTACT);

    }
    private ContactOpenHelper mHelper;

    @Override
    public boolean onCreate() {

        mHelper = new ContactOpenHelper(getContext());
//        if (mHelper != null){
//            return true;
//        }
//        return false;
        return true;
    }



    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        //数据存到数据库  创建db文件  创建表

        int code = mUriMatcher.match(uri);
        switch (code){
            case CONTACT:
                SQLiteDatabase db = mHelper.getWritableDatabase();
//                mHelper.onUpgrade(db,1,2);
//                db = mHelper.getWritableDatabase();
                long id = db.insert(ContactOpenHelper.T_CONTACT, "", values);
                if (id > 0 ){
                    System.out.println("----------ContanctProvider  添加成功");
                    //拼接最新uri
                    uri = ContentUris.withAppendedId(uri,id);
                }
                break;
            default:
                break;
        }
        return uri;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        int code = mUriMatcher.match(uri);
        int deleteCount = 0;
        switch (code){
            case CONTACT:
                SQLiteDatabase db = mHelper.getWritableDatabase();
                deleteCount = db.delete(ContactOpenHelper.T_CONTACT, selection, selectionArgs);
                if (deleteCount > 0){

                    System.out.println("----------ContanctProvider  删除成功");
                }
                break;
            default:
                break;
        }
        return deleteCount;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        int updateCount = 0;
        int code = mUriMatcher.match(uri);
        switch (code){
            case CONTACT:
                SQLiteDatabase db = mHelper.getWritableDatabase();
                updateCount = db.update(ContactOpenHelper.T_CONTACT, values, selection, selectionArgs);
                if (updateCount >0){
                    System.out.println("----------ContanctProvider  更新成功");

                }
                break;
            default:
                break;
        }
        return updateCount;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        Cursor query = null;
        int code = mUriMatcher.match(uri);
        switch (code){
            case CONTACT:

                SQLiteDatabase db = mHelper.getWritableDatabase();
                query = db.query(ContactOpenHelper.T_CONTACT, projection, selection, selectionArgs, null, null, sortOrder);
                System.out.println("----------ContanctProvider  查询成功");

                break;
            default:
                break;
        }
        return query;
    }
}

一般用到这个类都会需要一个extends SQLiteOpenHelper这个东西,就是创建数据库的,一般通过上边那个类(ContactsProvider)来操作这个东西

代码

public class ContactOpenHelper extends SQLiteOpenHelper {
    public static final String T_CONTACT = "t_contact";
    /**
     * 数据库版本
     */
    private static final int DATABASE_VERSION = 1;
    /**
     * 数据库名称
     */
    private static final String DATABASE_NAME = "con.db";

    public class ContactTable implements BaseColumns{//默认添加字段信息(一列)
        public static final String _ID = "_id";//账号
        public static final String ACCOUNT = "account";//账号
        public static final String NICKNAME = "nickname";//昵称
        public static final String HEADIMAGE = "headimage";//头像
        public static final String PINYIN = "pinyin";//账号拼音

    }


    public ContactOpenHelper(Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }



    @Override       //创建数据库调用这个类

    public void onCreate(SQLiteDatabase db) {



        //创建数据表

        String sql =("create table if not exists "+T_CONTACT+"" +

                "("+ContactTable._ID+" integer primary key autoincrement," +

                ""+ContactTable.ACCOUNT+" text not null,"+ContactTable.NICKNAME+" text not null," +

                ""+ContactTable.HEADIMAGE+" text not null,"+ContactTable.PINYIN+" text not null)");



        //插入数据

        db.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

但这这个数据库的创建,我被坑的莫梦奇妙,直接就是创建不了,所以后续的操作就做不了,也就是说,对这个数据库中的表进行插入的时候,他不会报错,但是进行其他操作的话就会报错,而且,根本就没有你创建的表,更没有数据库,后来我改了一下数据库名称,就没事了 ??????然后就没事了???不知道为啥,可能是因为我在测试的时候,数据库名称没有加.db,之后还有的之歌名称,只不过加上了.db的原因吧,不晓得不晓得。。。

哦,对了,这个ContentProvider的使用,还需要在清单文件里进行provider一下,这里边有很多参数,随便搜一下就有,我就不说了,OK就这样记录一下,后期有机会再补充详细的。

<provider
    android:name="com.provider.ContactsProvider"
    android:authorities="com.provider.ContactsProvider"/>
    ```
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值