ch8 ProviderDemo
布局文件不需要改
MainActivity.java
package com.example.ch08providerdemo;import androidx.appcompat.app.AppCompatActivity;import android.net.Uri;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//注册ContentObservergetContentResolver().registerContentObserver(Uri.parse("content://" + MyStar.AUTHORITY),true,new MyObserver(null));}
}
MyObserver.java
package com.example.ch08providerdemo;import android.database.ContentObserver;
import android.os.Handler;
import android.util.Log;public class MyObserver extends ContentObserver {public MyObserver(Handler handler) {super(handler);}@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);
// if(selfChange){Log.i("lww", "数据发生变化");
// }}
}
MySqliteHelper.java
package com.example.ch08providerdemo;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import androidx.annotation.Nullable;public class MySqliteHelper extends SQLiteOpenHelper {public MySqliteHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase) {//第一次使用时创建数据库表String table = "create table StarTB(id integer primary key autoincrement, name varchar(10), hobby varchar(50))";sqLiteDatabase.execSQL(table);}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {}
}
MyStar.java
package com.example.ch08providerdemo;import android.net.Uri;
import android.provider.BaseColumns;/*** 用于定义数据表的结构的Java Bean*/
public final class MyStar {//定义Authoritypublic static final String AUTHORITY = "net.onest.lww.provider";//定义内部表结构(列名)public static final class MyStarTable implements BaseColumns{//定义数据表的列名称public final static String _ID = "id";public final static String NAME = "name";public final static String HOBBY = "hobby";//定义2个Uripublic final static Uri STARS_CONTENT_URI =Uri.parse("content://" + AUTHORITY + "/stars");public final static Uri STAR_CONTENT_URI =Uri.parse("content://" + AUTHORITY + "/star/#");}
}
MyStarProvider.java
package com.example.ch08providerdemo;import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;public class MyStarProvider extends ContentProvider {//定义UriMatcher属性private static UriMatcher matcher =new UriMatcher(UriMatcher.NO_MATCH);//定义数据库管理类的对象属性private MySqliteHelper dbHelper;//定义2个标号private static final int STARS = 1;private static final int STAR = 2;//注册2个Uri,并关联Uri与标号static{matcher.addURI(MyStar.AUTHORITY, "stars", STARS);matcher.addURI(MyStar.AUTHORITY, "star/#", STAR);}public MyStarProvider() {}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {int n = 0;//获取可写的数据库对象SQLiteDatabase db = dbHelper.getWritableDatabase();switch (matcher.match(uri)){case STARS:n = db.delete("StarTB", selection, selectionArgs);break;case STAR://获取资源idlong id = ContentUris.parseId(uri);Log.i("lww", "待删除的id:" + id);//重新拼接where条件String where = "id = " + id;if(null != selection && !"".equals(selection)) {where = where + " and " + selection;}//执行更新n = db.delete("StarTB", where, selectionArgs);break;default:throw new UnsupportedOperationException("Not yet implemented");}if(n > 0){//通知数据改变getContext().getContentResolver().notifyChange(uri, null);}return n;}@Overridepublic String getType(Uri uri) {String type = null;//根据参数的形式(批量/单一操作)来返回相应的MIME类型switch (matcher.match(uri)){case STARS://批量操作数据type = "lww.cursor.dir/net.onest.lww.provider";break;case STAR://单一操作数据type = "lww.cursor.item/net.onest.lww.provider";break;default:throw new UnsupportedOperationException("Not yet implemented");}return type;}@Overridepublic Uri insert(Uri uri, ContentValues values) {//实现插入数据操作switch (matcher.match(uri)){// case STAR:case STARS://获取可写的数据库对象SQLiteDatabase db = dbHelper.getWritableDatabase();//执行插入操作long rowId = db.insert("StarTB", null, values);if(rowId > 0){//插入成功,通知数据改变//通知数据改变getContext().getContentResolver().notifyChange(uri, null);// 拼接Uri和被插入数据的idreturn ContentUris.withAppendedId(uri, rowId);}else{//插入失败return null;}default:throw new UnsupportedOperationException("Not yet implemented");}}@Overridepublic boolean onCreate() {dbHelper = new MySqliteHelper(getContext(),"StarsDB.db",null, 1);return true;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {Cursor cursor = null;//获取可读的数据库对象SQLiteDatabase db = dbHelper.getReadableDatabase();switch (matcher.match(uri)){case STARS://批量查询操作//执行查询操作cursor = db.query("StarTB", projection,selection, selectionArgs,null, null,sortOrder);break;case STAR://单一查询操作 。。。。。。。/../3//解析uri中的idlong id = ContentUris.parseId(uri);//重新拼接where条件String where = "id = " + id;if(null != selection && !"".equals(selection)) {where = where + " and " + selection;}//获取数据库执行查询操作cursor = db.query("StarDB", projection,where, selectionArgs, null,null, sortOrder);break;default:throw new UnsupportedOperationException("Not yet implemented");}return cursor;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {int n = 0;//获取可写的数据库对象SQLiteDatabase db = dbHelper.getWritableDatabase();switch (matcher.match(uri)){case STARS:n = db.update("StarTB", values, selection, selectionArgs);break;case STAR://获取资源idlong id = ContentUris.parseId(uri);String where = "id = " + id;if(null != selection && !"".equals(selection)) {where = where + " and " + selection;}//执行更新n = db.update("StarTB", values, where, selectionArgs);break;default:throw new UnsupportedOperationException("Not yet implemented");}if(n > 0){//通知数据改变getContext().getContentResolver().notifyChange(uri, null);}return n;}
}
ch8 ProviderDemo相关推荐
- 视觉SLAM十四讲CH8代码解析及课后习题详解
第一版的代码: direct_semidense.cpp #include <iostream> #include <fstream> #include <list> ...
- uvm_primer ch8 参数化类
uvm_primer ch8 参数化类 ch8 parameterized class 从module位宽参数化引入 参数化类 举一反三:另一种实现方法 ch8 parameterized class ...
- 《视觉SLAM十四讲》笔记(ch8)
ch8-视觉里程计2 主要目标:1.理解光流法跟踪特征点的原理 2.理解直接法是如何估计相机位姿的 3.使用g2o进行直接法的计算 本讲我们将介绍直接法的原理,并利用g2o实现直接法中的一些核 ...
- JavaWeb Adv CH8 web服务的相互转接(多图猫杀)
具体的操作步骤: 一.建立service服务 操作如图所示: 输入service服务的项目的基本信息注意:frameword那里最好是选择比较好的XFire然后是Java EE5.0 注意下图中所选择 ...
- Core java for impatient 笔记 ch8 流
流stream 使用了数据视图,让你可以在比集合更高的概念上指定操作 使用流,你只需要将操作的调度留给实现,例如,假设你要计算某个属性的平均值,你只需要 指定数据源和属性,然后流类库会优化计算,比如使 ...
- 计算机视觉ch8 基于LeNet的手写字体识别
文章目录 原理 LeNet的简单介绍 Minist数据集的特点 Python代码实现 原理 卷积神经网络参考:https://www.cnblogs.com/chensheng-zhou/p/6380 ...
- TCP/IP网络编程笔记-ch8.域名及网络地址
文章目录 函数 利用域名获取IP地址 利用IP地址获取域名 知识点 域名系统 IP地址和域名之间的转换 实例 函数 利用域名获取IP地址 利用gethostbyname可以通过传递字符串格式的域名获取 ...
- 机器学习实战——ch8.2 回归之预测乐高玩具价格
这部分由于书上提供的Google的购物API已经关闭,所以只能在实验楼上完成了这个实验(这一次,我只是代码的搬运工) 完整的代码及注释: #-*- coding: utf-8 -*- from num ...
- scanf可不可以输入浮点型_数据的输入和输出
一.基本数据类型C 的基本数据类型有 short.int.long.char.float.double 等.类型多且杂,学习时极易厌烦,这时建议使用思维导图来整理这些繁杂但有章的知识.做思维导图时首先 ...
- MM32F3277 MicroPython 实验板设计和软件测试
简 介: 对于截止到(2021-11-08 21:13:44)来自灵动的MicroPython在MM32F3277上的一致的基本功能进行测试.并给除了MicroPython的相关模块的の基本测试调用版 ...
最新文章
- 目标还是中国人,纽约智慧城市项目想通过EB-5募资10亿
- nginx配置详解与优化
- java工程前面有个红色感叹号
- poj2104(划分树模板)
- 面向对象编程02—装饰器、类方法、静态方、访问控制
- 【数据结构与算法】之深入解析“三数之和”的求解思路与算法示例
- 盐城工学院计算机基础试卷,大学计算机基础及实用软件/大学计算机基础
- 【U3D】掉落物设计
- win10定时关机程序
- arduino i2c EEPROM(AT24C02、AT24C08、AT24C16、AT24C32、AT24C64)驱动
- 简要分析VB6.0和VB.NET区别
- 外贸ERP软件之工贸一体企业解决方案
- opengl 五角星画法 源代码
- java五子棋技术路线,一位老码农的编程简史
- VirtualBox安装Centos图解教程
- 【知乎】如何看待同学聚会上的言论「我在四线城市跟你在一线城市的年薪一样多(15万元)」?
- 《花千骨》绝美外景剧照 赵丽颖霍建华仙气足
- pytorch处理CK+数据集
- 数据分析,如何挖掘业务机会
- 2000的笔记本能HTML,我想买一个笔记本,最好是2000--3000元,请高人给个配置单。谢谢,家用的。...
热门文章
- (转)2017中国互联网证券年度报告
- (转)如何学习盈透api的开发?
- 连续 3 年支撑双 11,阿里云神龙如何扛住全球流量洪峰?
- Kafka从上手到实践 - 庖丁解牛:Consumer | 凌云时刻
- OpenStack Rocky Octavia 的实现与分析(零)架构简介
- 【优化分类】基于matlab麻雀算法优化核极限学习机KELM分类【含Matlab源码 1791期】
- 【MTSP】基于matlab遗传算法求解多旅行商问题【含Matlab源码 1325期】
- 【滤波器】基于matlab平方根升余弦滤波器【含Matlab源码 994期】
- fb静态区域_西门子 PLC FC和FB用法讲解
- 【记录】帮同学做的一个函数拟合