说明一下
本项目有个问题需要说明一下,就是provider
的onCreate()
方法会先于Activity
的onCreate()
方法执行,所以DatabaseTest
项目一运行,就会先执行provider
的onCreate()
方法,创建数据库
前提
本项目在前面DatabaseTest项目
的基础上进行更改,首先将MyDatabaseHelper
中使用Toast弹出数据库创建成功的提示去掉,因为跨程序访问时我们不能直接使用Toast。然后创建一个内容提供器
,在包上单机右键 New->Other->Content Provider
这样就能自动导入相关的<provider>
进行注册
1 | <provider |
DatabaseProvider 代码
1 | public class DatabaseProvider extends ContentProvider { |
几个注意点
onCreate()
中借用MyDataBaseHelper
完成数据库的创建或升级,并且provider
的onCreate()
方法会先于Activity
的onCreate()
方法执行query()
返回cursor
insert()
返回能够表示这条新增数据的URI
update()
和delete()
返回受影响的行数getPathSegments()
会将内容URI
权限之后的部分用/
分割,并把结果放到字符串列表当中,其第0个位置放的是路径,第1个位置就是id
了。
跨应用访问数据
接着在模拟器卸载重装当前应用,再创建一个新项目:ProviderTest
1.布局
1 |
|
2.主活动
1 | public class MainActivity extends AppCompatActivity { |
运行: