ContactsProvider的使用

ContactsProvider的使用这个东西就是Android用来共享数据的,没啥太多的东西,我也只会用,简单的了解了下原理跟使用先上个代码publicclassContactsProviderextendsContentProvider{//主机地址当前类的完整路径publicstaticfinalStringAUTHORITIES=”com.yide.yide.provide…

这个东西就是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"/>
    ```

今天的文章ContactsProvider的使用分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24069.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注