一、实现要求:
1、contentprovider是安卓四大组件之一,请使用其方法类进行数据获取;
2、请自建一个provider,然后在另一个app中使用resolver调用这个provider。
二、实现过程:
①Myresolver 数据接收方
1.首先New一个Empty Activity项目,并命名为Myresolver.然后在activity_main.xml中插入Textview和Button控件.
2.在Myresolver-MainActivity中,首先使用ContentResolver创建resolver对象,然后设置Button的点击函数,在点击函数中使用resolver对象,向Uri资源地址对应的空间的数据表中,插入values数据值;
此处是向txy.provider2项目的数据库的数据表student中插入values数值.
②provider 数据发放方
1.新建一个provider项目, 然后将以前项目中的MyDBHelper.java文件粘贴到新的文件夹中,利用该文件可以进行数据库连接,并从新的文件夹复制该文件,粘贴到provider项目中.
2.执行New->Other->Content Provider,命名为MyContentProvider,然后设置URI Authorities属性为txy.provider2,在该项目的注册文件中可以对应查询到该信息,并且在MyContentProvider中可以发现有一系列进行增删改查操作的函数,与reslover对应.
3.在provider中New一个MyDAO.java类,目的是进行对数据表的Insert动作.首先创建MyDAO的构造函数,然后在构造函数中创建数据库连接对象,注意需要在MainAcitivity中创建MyDAO类的对象myDAO,然后将this指针传到MyDAO类中.
4.在MyDAO.java类中新增DAOInsert()函数,表示向uri资源对应的数据表中的某一行rowId新增数据,然后修改uri的值为inserturi,并通知resolver修改成功,最后返回Uri类型的变量inserturi.
5. 在MyContentProvider.java的onCreate()函数中增加对myDAO的定义和初始化,并且在inset()函数的返回值中添加对MyDAO.java中DAOInsert()函数的插入动作.
三、实现结果:
1.首先运行Myresolver项目,点击BUTTON按钮,运行成功,然后关闭Myresolver项目.
2.打开provider项目,点击运行,打开App Inspection即可在txyDB数据库的student表中看到从reslover发送过来的值,由此实现了数据被多个app所共享的目标.
四、心得与总结:
①通过本次实验,我对于Contentprovider实现数据共享的机制有了进一步的理解,可以实现在app1进行点击插入的动作,然后在app2能够接收到相应的数据插入结果.实现过程主要分为两部分,先对Myresolver编写,它是数据的接收方,可以解析数据并对数据进行一系列crud操作,再对provider编写,它是数据的发送方.
②实验过程中也遇到了许多问题,比如在运行Myresolver时会发生闪退现象,解决方法是在注册文件中加入以下代码:(显示指定出数据发送方的package),再次运行则闪退解决.
<queries> <package android:name="com.example.provider"></package> </queries>
③实验最大的心得就是,在面对复杂的编程问题时,学会将问题拆解,比如这里可以将整个数据共享过程拆解成发送方和接收方,然后分别根据他们所实现的功能编写相应的代码.编程过程中注意返回值的类型,语句对应的含义,比如实现了什么功能等等,多写多多思考.