使用ContentProvider实现多应用的数据共享
ContentProvider:
实现一组通用的数据和方法的储存和共享,通常是通过getContentResolver()方法来获得Activity或其他应用程序组件中的ContentProvider对象,开发人员一般不直接使用ContentProvider类的对象,而每个ContentProvider都仅有一个单独的实例,和多个不同进程之间的通信有ContentProvider类和getContentReseolver()方法来配合处理。
ContentProvider的使用方法:
1.新建一个ContentProvider类,重写构造方法,insert,delete,getType,onCreate,query,update等方法(根据需要来自行决定重写那些方法)
2.为程序添加一个public static final Uri URI = "content://+<包名>+URIName"静态常量,其他程序通过这个URI来调用此ContentProvider类中的数据
3.为实现数据的存储和读取,起码需要重写onCreate和insert,query方法,下面是重写的具体代码:
public static final Uri URI = Uri.parse("content://andrew.com.contentproviderdemo
.MyContentProviderURI");
SQLiteDatabase database;
@Override
public Uri insert(Uri uri, ContentValues values) {
database.insert("tab","name",values);
return null;
}
@Override
public boolean onCreate() {
database = getContext().openOrCreateDatabase("mycp.db3", Context.MODE_PRIVATE,null); //这段创建数据库的代码,在执行第一次的时候没有问题
//如果第二次运行,会出现错误,解释是说这个要创建的数据库已经存在
//但在使用Sqiliteopenhelper中写出这样的语句,却不会出现这种错误,有可能这是因为sqliteopenhelper
//里面已经解决
//由于暂时简化这种错误的处理时间,采用的办法是运行一遍,成功创建数据库后将代码注释掉
//这样就能解决数据库已经存在的问题
database.execSQL("CREATE TABLE tab("+
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT DEFAULT \"\")");
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Cursor cursor = database.query("tab",null,null,null,null,null,null);
return cursor;
}
提供共享的ContentProvider成功运行后;在另外的程序中读取该ContentProvider的信息的代码实现:
Uri URI = Uri.parse("content://andrew.com.contentproviderdemo.MyContentProviderURI");
Cursor cursor = getContentResolver().query(URI,null,null,null,null);
for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
String value = cursor.getString(cursor.getColumnIndex("name"));
Toast.makeText(getApplicationContext(),value,Toast.LENGTH_SHORT).show();
}
注:ContentProvider需要在manifests中注册相关信息:
<provider
android:name=".MyContentProvider"
android:authorities="andrew.com.contentproviderdemo.MyContentProviderURI"
android:enabled="true"
android:exported="true">
</provider>
使用ContentProvider实现多应用的数据共享的更多相关文章
- Android 学习笔记之ContentProvider实现数据共享....
PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...
- ContentProvider域名替换小工具
开发项目域名想怎么换就怎么换,就是这么任性! 这是一个很有意思的小工具! 这是一个方便开发人员和测试人员的小工具!! 吐槽: 一直在做Android开发,一直总有一个问题存在:做自己公司的apk开发时 ...
- Android基础 : Android ContentProvider
Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activi ...
- Android四大核心组件之ContentProvider
实验内容 学习ContextProvider用法 编码实现简单ContextProvider功能 实验要求 通过简单代码了解ContextProvider功能和用法 实验步骤 ContextProvi ...
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- ContentProvider总结
一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给 ...
- Android开发数据存储之ContentProvider详解
转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可 ...
- Android ContentProvider和Uri详解 (绝对全面)
ContentProvider的基本概念 : 1.ContentProvider为存储和读取数据提供了统一的接口 2.使用ContentProvider,应用程序可以实现数据共享 3.andr ...
- Android开发之ContentProvider的简单使用
ContentProvider,内容提供者 官网结构图: 作为四大组件之一的ContentProvider,主要是用于应用间数据共享使用的. ContentProvider把应用的数据封装起来,然后提 ...
随机推荐
- 一款非常不错的重写listctrl类-CListCtrlEx
原文在:https://www.codeproject.com/Articles/28063/An-Extended-MFC-CListCtrl-to-edit-individual-cells li ...
- java面向对象编程(六)--四大特征之继承
本文将介绍继承.方法重载和方法覆盖.其中方法重载和方法覆盖是在讲多态时必须要清楚的一个知识点. 一.继承 1.继承的概念 继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变 ...
- 剑指Offer 35. 数组中的逆序对 (数组)
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- iOS动画学习
学习一下动画,感谢以下大神的文章: UIView:基础动画.关键帧动画.转场动画 Core Animation :基础动画,关键帧动画,动画组,转场动画,逐帧动画 CALayer :CALaye ...
- Spell checker using hash table
Problem description Given a text file, show the spell errors from it. (https://www.andrew.cmu.edu/c ...
- iOS 添加第三方字体
有时候根据UI的设计,我们需要添加第三方字体到工程中,实现特殊的效果. 一,把第三方字体包导入工程 二,在info.plist文件中添加Fonts provided by application 类型 ...
- Gym101889B. Buggy ICPC(打表)
比赛链接:传送门 题目: Problem B – Buggy ICPC Author : Gabriel Poesia, Brasil Alan Curing is a famous sports p ...
- 记一次php脚本memory exhausted
表象报错如下: Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16651985 bytes) 出 ...
- 三、tcp、ip协议详细
1. 什么是 TCP/IP? TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合. 传统上来说 TCP/IP 被认为是一个四层协议 1) 网络接口层: 主要是指物理层次的一些接口,比如电缆等 ...
- 安装包安装npm
在阿里云机器上centos7安装npm可以直接yum安装,然后基于镜像的时候安装不了,直接使用安装包安装,记录一下: 官网下载地址:https://nodejs.org/en/download/ #! ...