1 contentprovider的使用方法
1.1什么是contentprovider
什么是ContentProvider:
是Android的四大组件之一
主要用于不同的应用程序之间实现数据共享功能
什么是ContentResolver:
是数据调用者,ContentProvider将数据发布出来,通过ContentResolver对象结合Uri进行调用
通过ContentResolver对象可以调用ContentProvider的增删改查
什么是Uri:
Uri(通用资源标识符 Universal Resource Identifer),代表数据操作的地址,每一个ContentProvider发布数据时都会有唯一的地址。
比如:content://(固定写法)+com.android.contacts(包名,可变)+/contacts(path路径)
创建自定义ContentProvider的步骤:
1.使用SQLite技术,创建好数据库和数据表
2.新建类继承ContentProvider
3.重写6个抽象方法
4.创建UriMatcher,定义Uri规则
5.在Manifest中注册provider
6.ContentResolver对ContentProvider中共享的数据进行增删改查操作
1.2contentprovider的创建
package com.example.work.database;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class TestContentProvider extends ContentProvider {
private static UriMatcher uriMatcher;
public static final int URI_MATCH_USER = 1;
public static final int URI_MATCH_ITEM = 2;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(URIList.AUTHORITY, DatabaseHelper.USERNAME, 1);
uriMatcher.addURI(URIList.AUTHORITY, DatabaseHelper.ITEMID, 2);
}
private DatabaseHelper databaseHelper;
@Override
public boolean onCreate() {
databaseHelper = new DatabaseHelper(getContext());
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
String tableName = getTableName(uri);
if (TextUtils.isEmpty((tableName))) {
return null;
}
Cursor cursor = databaseHelper.getReadableDatabase().query(tableName, projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
String tableName = getTableName(uri);
if (TextUtils.isEmpty((tableName))) {
return null;
}
long id = databaseHelper.getWritableDatabase().insert(tableName, null, values);
return ContentUris.withAppendedId(url);
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
String tableName = getTableName(uri);
if (TextUtils.isEmpty((tableName))) {
return 0;
}
int count = databaseHelper.getWritableDatabase().delete(tableName, selection, selectionArgs);
return count;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
String tableName = getTableName(uri);
if (TextUtils.isEmpty((tableName))) {
return 0;
}
int count = databaseHelper.getWritableDatabase().update(tableName,values,selection,selectionArgs);
return count;
}
private String getTableName(Uri uri) {
int type = uriMatcher.match(uri);
String tableName = "";
switch (type) {
case URI_MATCH_USER:
tableName = DatabaseHelper.USERNAME;
break;
case URI_MATCH_ITEM:
tableName = DatabaseHelper.ITEMNAME;
break;
}
return tableName;
}
}