Android 四大组件学习之ContentProvider二
上节学习了什么是ContentProvider。以及ContentProvider的作用。以及什么是URL。本节就对上节学习的知识做一个实践,也就是定义自己的ContentProvider
好。实践是检验真理的唯一标准。 那我们就開始行动吧
第一步: 创建一个自己的ContentProvider,我取名为MyContentProvider
- public class MyContentProvider extends ContentProvider {
- @Override
- public int delete(Uri arg0, String arg1, String[] arg2) {
- // TODO Auto-generated method stub
- return 0;
- }
- @Override
- public String getType(Uri arg0) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public Uri insert(Uri arg0, ContentValues arg1) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public boolean onCreate() {
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
- String arg4) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
- // TODO Auto-generated method stub
- return 0;
- }
- }
这些方法非常熟悉吧。 这不是数据库常见的增删改查吗? 原来ContentProvider为我们提供了所以的数据库的操作。我们仅仅需调用实现就可以。
第二步: 创建一个SQLiteOpenHelper类,我取名为MyDbOpenHelper
- public class MyDbOpenHelper extends SQLiteOpenHelper {
- public String TABLE_NAME="user";
- public MyDbOpenHelper(Context context) {
- super(context, "user.db", null, 1);
- // TODO Auto-generated constructor stub
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- // TODO Auto-generated method stub
- db.execSQL("create table user(_id integer primary key autoincrement, name char(10), age integer(2), salary integer(10))");
- }
- @Override
- public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
- // TODO Auto-generated method stub
- }
- }
在create方法中创建table为user的数据表
第三步: 在配置文件里注冊ContentProvider
- <provider android:name="com.ui.contentprovider.MyContentProvider"
- android:authorities="com.ui.contentprovider" url路径
- android:exported="true"> 暴露自己须要打开
- </provider>
第四步:再创建一个Activity。用于插入数据。布局文件为四个button
既然一切都准备好了。
我们就插入一组数据:
Activity的OnCreate方法
- public class MainActivity extends Activity {
- ContentResolver cResolver;
- //得到自定义的ContentProvider的url
- Uri uri=Uri.parse("content://com.ui.contentprovider/");
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- /*得到ContentResolver*/
- cResolver = getContentResolver();
- }
当点击insertbutton后须要插入的数据
- public void insert(View v)
- {
- Log.i("MainActivity", "---------insert");
- ContentValues values = new ContentValues();
- values.put("name", "张三");
- values.put("age", 20);
- values.put("salary", 13000);
- cResolver.insert(uri, values);
- values.put("name", "李四");
- values.put("age", 19);
- values.put("salary", 10000);
- cResolver.insert(uri, values);
- values.put("name", "王五");
- values.put("age", 40);
- values.put("salary", 200000);
- cResolver.insert(uri, values);
- values.put("name", "朱八");
- values.put("age", 10);
- values.put("salary", 2000);
- cResolver.insert(uri, values);
- }
此时ContentProvider中给第三方提供的insert方法须要实现:
- public class MyContentProvider extends ContentProvider {
- private MyDbOpenHelper dhHelper;
- private SQLiteDatabase db;
- @Override
- public boolean onCreate() {
- Log.i("MyContentProvider", "onCreate");
- //调用MyDbOpenHelper的onCreate方法创建数据库
- dhHelper = new MyDbOpenHelper(getContext());
- db = dhHelper.getWritableDatabase();
- return false;
- }
- //插入第三方应用的数据
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- Log.i("MyContentProvider", "insert");
- db.insert(dhHelper.TABLE_NAME, null, values);
- return uri;
- }
測试例如以下: 先执行ContentProvider所在的Activity。 在执行第三方应用,得到结果为:
接下来,看一下删除的操作, 我们删除名字为王五的同学:
Activity中当点击deletebutton后:
- public void delete(View v)
- {
- Log.i("MainActivity", "---------delete");
- cResolver.delete(uri, "name = ?", new String[]{"王五"});
- }
ContentProvider中的delete须要改为:
- @Override
- public int delete(Uri arg0, String whereClause, String[] whereArgs) {
- Log.i("MyContentProvider", "delete");
- db.delete(dhHelper.TABLE_NAME, whereClause, whereArgs);
- return 0;
- }
执行结果为:
接下来学习改动操作, 因为朱八同学近期表现比較好,老板给加薪了。
加了500
activity当点击updatebutton运行的操作:
- public void update(View v)
- {
- Log.i("MainActivity", "---------update");
- ContentValues values = new ContentValues();
- values.put("salary", 2500);
- cResolver.update(uri, values, "name = ?", new String[]{"朱八"});
- }
ContentProvider中改动为:
- @Override
- public int update(Uri arg0, ContentValues values, String whereClause, String[] whereArgs) {
- Log.i("MyContentProvider", "update");
- int id = db.update(dhHelper.TABLE_NAME, values, whereClause, whereArgs);
- return id;
- }
执行效果为:
接下来最后一个操作,查询操作。查询工资大于等于10000的:
Activity的代码:
- public void query(View v)
- {
- Cursor cursor = cResolver.query(uri, null, "salary >= ?
- ", new String[]{"10000"}, null);
- Log.i("MainActivity", "---------query");
- while(cursor.moveToNext())
- {
- String name = cursor.getString(cursor.getColumnIndex("name"));
- int age = cursor.getInt(cursor.getColumnIndex("age"));
- int salary = cursor.getInt(cursor.getColumnIndex("salary"));
- System.out.println(name + ";" + age + ";" + salary);
- }
- }
ContentProvider中的须要改动的代码:
- @Override
- public Cursor query(Uri arg0, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
- Log.i("MyContentProvider", "query");
- Cursor cursor = db.query(dhHelper.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
- return cursor;
- }
串口的打印:
好, 关于自定义自己的ContentProvider就到这里,我们实现了所以的增删改查操作。
Android 四大组件学习之ContentProvider二的更多相关文章
- Android 四大组件学习之ContentProvider五
上几节学习了ContentProvider的实际用途,读取短信.插入短信,读取联系人.插入联系人等. 本节课在学习ContentProvider的观察者. 在生活中有第三方的软件.比方什么短信软件.此 ...
- Android 四大组件学习之ContentProvider三
上节课学习怎样自己创建一个ContentProvider.以及用ContentResolver去操作ContentProvider. 今天我们用系统提供的ContentProvider. 先来个简单的 ...
- Android 四大组件学习之ContentProvider四
上节我们学习了怎样去读取系统短信以及插入一条短信到系统中. 本节我们学习怎样获取系统的联系人,以及插入一条联系人 好.废话不多说了,直接操作. 首先和读取短信一样,先找到联系人在数据库中的位置. wa ...
- Android 四大组件学习之BroadcastReceiver二
上节学习了怎样创建一个广播.也尝试接受系统打电话的广播. 本节课学习怎样自己定义广播.自己定义广播实质上也就是创建一个发送广播者,创建一个接受该广播者. 那我们就開始行动吧. 先创建一个发送广播的应用 ...
- android四大组件学习总结以及各个组件示例(1)
android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...
- Android 四大组件之 Activity(二)
1.综述 Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满 ...
- Android 四大组件学习之Server一
上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...
- Android 四大组件学习之BroadcastReceiver一
本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...
- Android四大组件之一:ContentProvider(内容提供者)
Android中还提供了名为ContentProvider(内容提供者),可以向其他应用提供数据,但不常用,除非是同一公司开发的App,可以向不同应用提供数据.虽然为Android的四大组件之一,但用 ...
随机推荐
- python--5、包
包 包,即一个包含__init__.py文件的文件夹,创建包的目的也就是为了用文件夹将文件(模块)组织起来.python3中,即使包里没有__init__.py文件,仍能import使用.而pytho ...
- Android5.1关机充电界面尺寸修改
Android5.1关机充电界面尺寸修改 因为项目的屏幕尺寸和一般的手机屏幕不一样,因此关机充电界面在设备上运行后严重变形,就需要自己修改这个界面了,废话不多说了,开打开打! 首先要说明这里是以And ...
- 努比亚 N2(Nubia NX575J) 解锁BootLoader 并进入临时recovery ROOT
工具下载链接:https://pan.baidu.com/s/1jJoK2Yq 备用下载链接:https://pan.baidu.com/s/1snjwLdz 密码:71rg 本篇教程教你如何傻瓜式解 ...
- EKF优化:协方差coff计算公式、意义、Code优化
复习!复习! 原文链接:http://blog.csdn.net/goodshot/article/details/8611178 1.代码: Matlab相关系数的意义: Eigen::Matrix ...
- 创建一个类Person
创建一个类Person,包含以下属性:姓名(name).年龄(age).朋友(friends数组).问候(sayhi方法,输出问候语,例如:"你好!").交朋友(addFriend ...
- (转)Jetty实战之 安装 运行 部署
http://blog.csdn.net/kongxx/article/details/7218767 本文地址:http://blog.csdn.NET/kongxx/article/details ...
- vs2008 打开项目 无法读取项目文件
卸载vs2015之后 出现问题 C:\Windows\SysWOW64\regedit.exe 64系统运行这个 删除 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MS ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战需求分析1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain—创建窗体 BallJPanel—画小 ...
- BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板 贪心 + 堆 + 反向思考
Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50, ...
- 纯CSS 3D翻转一个面(翻转导航菜单 立方体)
在做练习的时候学到css的翻转导航菜单,原代码有点让人头疼,通过对其css的参数一点点研究了其实现过程. 这里推荐大家研究这个3D翻转动画的代码. 我的github:swarz,欢迎给老弟我++星星 ...