21 内容提供者1

内容提供者简介
●内容提供者(ContentProvider) 是Android系统四大组件之一,用于保
存和检索数据,是Android系统中不同应用程序之间共享数据的接口。
●ContentProvider 是不同应用程序之间进行数据交换的标准API,以Uri形式对外提供数据,允许其他应用操作本应用数据。其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据。
在这里插入图片描述

创建一个内容提供者

步骤:
1.创建自定义类继承父类ContentProvider
2.重写抽象父类的方法
3.构建Uri解析器
4.添加构建访间uri:数据增删改查: api
5.注册内容提供者

public class MyProvider extends ContentProvider {
private DBHelper helper ;
private static UriMatcher uriMatcher=new Ur iMatcher CuriMatcher .NO_ MATCH);;
private static final String authority="com. provider";
private static final int QUERYSUCCESS=1;
private static final int UPDATESUCCESS=2;
private static final int INSERTSUCCESS=3;
private static final int DELETESUCCESS=4;
//zy. imau. edu .cn/path com.provider/query insert update
static {
uriMatcher . addURI (authority, "query" ,QUERYSUCCESS);
uriMatcher . addURI (authority ,"insert" ,INSERTSUCCESS);
uriMatcher . addURI (authority, "update" ,UPDATESUCCESS);
uriMatcher . addURI (authority, "delete" ,DELETESUCCESS);
//1
@override
pub1ic boolean onCreate() {
helper=new DBHe lper (getContext());
return false;
}
@Nullable
@override
public Cursor query(@NonNull Uri uri, @Nu11ab1e String[] projection, @Nullable String
selection, @Nu11ab1e String[] selectionArgs, @Nullable string sortorder) {
//1.解析uri正确
int code=uriMatcher . match(url);
//2.判读是不是查询
if(code==QUERYSUCCESS){
//3. 操作数据
sQLiteDatabase db=helper . getReadableDatabaseO;
//不用关闭游标
Cursor cursor=
db. query(const.TABLE,projection,selection,selecti onargs , nu11 ,nu11 ,sortorder);
return cursor ;
return null;
}
@Nullable
@override
public string getType(@NonNull uri uri) {
return null;
}
@Nu11able
@override
pub1ic Uri insert (@NonNu11 uri uri, @Nu11ab1e Contentvalues values) {
return null;
}
@override
pub1ic int delete (@NonNull uri uri, @Nullable String selection, @Nullable String[]
selectionArgs) {
return 0
}
@override
pub1ic int update (@NonNu11 Uri uri, @Nullable ContentValues values, @Nullable string
selection, @Nullable String[] selectionArgs) {
return 0;

<provider
android:name="cn.itcast. db.PersonDBProvider"
android:authorities="cn.itcast.db. personprovider" >
</provider>
  • 定义一个类继承android.content包下的ContentProvider类(抽象类)。子
    类需要重写它的onCreate()、delete()、 getType()、 insert()、 query()、update()这几个抽象方法。
  • ContentProvider是 四大组件之一一, 必须要在清单文件中注册

Uri简介

●ContentProvider的几个抽象方法, 这几个抽象方法中有-一个参数Uri, 它代表了数据的操作方法。Uri是 由scheme、authorites、 path三部分组成。
在这里插入图片描述
scheme:“content://” 是一个标准的前缀,表明这个数据被内容提供者所控制,它不会被修改;
authorities:“cn.itcast. db personprovider"是在清单文件中指定的
android:authorities属性值,该值必须唯一, 它表示了当前的内容提供者;
path:“/person" 代表资源(或者数据),当访问者需要操作不同数据时
这个部分是动态改变的

●Uri.parse(String str)方法是将字符串转化成Uri对象的。为了解析Uri对象,
Android系统提供了一个辅助工具类UriMatcher用于匹配Uri。

●UriMatcher中的常用方法如表所示:
在这里插入图片描述
ContentResolver的基本用法
●在Android系统中, ContentResolver充当着桥梁的角色。应用程序通过ContentProvider暴露自己的数据,通过ContentResolver对应用程序暴露的数据进行操作。
●通过ContentResovler对象实现数据的操作代码如下:

Uri uri = Uiparse("ntet/:/cn.itcast. db personprovider/person");
ContentResolver resolver = context,getContentResolver();
Cursor cursor = resolver,query(uni, new String() { "address","date","type","body" }, null, nill, nill);
while (cursor.moveToNext()) {
String address = cursor.getring(0);
}
cursor.close();

内容观察者(ContentObserver) 是用来观察指定Uri所代表的数据。当
ContentObserver观察到指定Uri代表的数据发生变化时,就会触发
ContentObserver的onChange()方法。此时在onChange()方法里使用
ContentResovler可以查询到变化的数据。

从图可以看出,使用ContentObserver观察A应用的数据时)首先要在A应
用的ContentProvider中调用ContentResolver的notifyChange()方法。调用
了这个方法之后当数据发生变化时,它就会向“消息中心”发送数据变化
的消息。然后C应用观察到消息中心”有数据变化时,就会触发
ContentObserver的onChange()方法。

ContentObserver的几个常用方法,如表所示。.
在这里插入图片描述

AI实战-泰坦尼克号生还可能性数据集分析预测实例(含19个源代码+59.76 KB完整的数据集) 代码手工整理,无语法错误,可运行。 包括:19个代码,共121.84 KB;数据大小:1个文件共59.76 KB。 使用到的模块: pandas numpy seaborn matplotlib.pyplot warnings sklearn.model_selection.train_test_split sklearn.ensemble.RandomForestClassifier sklearn.metrics.accuracy_score sklearn.metrics.confusion_matrix os scipy.stats sklearn.compose.ColumnTransformer sklearn.impute.SimpleImputer sklearn.preprocessing.OneHotEncoder sklearn.impute.KNNImputer sklearn.preprocessing.StandardScaler sklearn.ensemble.RandomForestRegressor sklearn.ensemble.GradientBoostingRegressor sklearn.metrics.classification_report sklearn.metrics.roc_auc_score sklearn.model_selection.cross_val_score sklearn.pipeline.Pipeline sklearn.model_selection.RandomizedSearchCV sklearn.ensemble.GradientBoostingClassifier sklearn.linear_model.LogisticRegression sklearn.naive_bayes.GaussianNB sklearn.metrics.roc_curve xgboost.XGBClassifier sklearn.ensemble.AdaBoostClassifier sklearn.tree.DecisionTreeClassifier sklearn.preprocessing.LabelEncoder imblearn.over_sampling.SMOTE sklearn.svm.SVC sklearn.model_selection.GridSearchCV math sklearn.neighbors.KNeighborsClassifier sklearn.metrics.precision_score sklearn.metrics.recall_score sklearn.metrics.f1_score sklearn.metrics.ConfusionMatrixDisplay torch dataclasses.dataclass typing.List typing.Tuple typing.FrozenSet typing.Set typing.Dict fcapy.lattice.ConceptLattice fcapy.lattice.formal_concept.FormalConcept fcapy.poset.POSet fcapy.visualizer.line_layouts.calc_levels sparselinear.SparseLinear sklearn.neural_network.MLPClassifier fcapy.context.FormalContext fcapy.visualizer.LineVizNx networkx sklearn.preprocessing.MinMaxScaler sklearn.ensemble.BaggingClassifier torch.nn torch.optim sklearn.datasets.load_iris
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值