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