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实现多应用的数据共享的更多相关文章

  1. Android 学习笔记之ContentProvider实现数据共享....

    PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...

  2. ContentProvider域名替换小工具

    开发项目域名想怎么换就怎么换,就是这么任性! 这是一个很有意思的小工具! 这是一个方便开发人员和测试人员的小工具!! 吐槽: 一直在做Android开发,一直总有一个问题存在:做自己公司的apk开发时 ...

  3. Android基础 : Android ContentProvider

    Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activi ...

  4. Android四大核心组件之ContentProvider

    实验内容 学习ContextProvider用法 编码实现简单ContextProvider功能 实验要求 通过简单代码了解ContextProvider功能和用法 实验步骤 ContextProvi ...

  5. 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)

    1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...

  6. ContentProvider总结

    一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给 ...

  7. Android开发数据存储之ContentProvider详解

    转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可 ...

  8. Android ContentProvider和Uri详解 (绝对全面)

        ContentProvider的基本概念 : 1.ContentProvider为存储和读取数据提供了统一的接口 2.使用ContentProvider,应用程序可以实现数据共享 3.andr ...

  9. Android开发之ContentProvider的简单使用

    ContentProvider,内容提供者 官网结构图: 作为四大组件之一的ContentProvider,主要是用于应用间数据共享使用的. ContentProvider把应用的数据封装起来,然后提 ...

随机推荐

  1. WebView性能、体验分析与优化

    育新 徐宏 嘉洁 ·2017-06-09 20:03 在App开发中,内嵌WebView始终占有着一席之地.它能以较低的成本实现Android.iOS和Web的复用,也可以冠冕堂皇的突破苹果对热更新的 ...

  2. 自动化测试-14.selenium加载FireFox配置

    前言 有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用firebug在打开的页面上继续定位页面元素,调试起来不方便 . 加载浏览器配置,需要用FirefoxProfile(profile ...

  3. 自动化测试-18.selenium之bugFree代码注释

    #encoding=utf-8 import xlrd,time,os from xlutils.copy import copy from selenium import webdriver def ...

  4. 磁盘操作系统 cmd命令

    DOS CMD :磁盘操作系统 不区分大小写 **cd \ 根目录 cls 清空屏幕 dir 显示目录 d: 进入D盘 cd 进入目录命令 dir 查看当前目录的文件与目录 del 删除文件 del ...

  5. JS 验证字符串是否为空

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. (拼接SQL语句)mysql中date类型,datetime类型

    : , . _ - /  %  &  # @ ! * | [ ] { }   ;  + = update ky set date = '18,9-2'  where id  = 1  // 2 ...

  7. 为什么redis使用单线程还能这么快?

    通常来讲,单线程处理能力要比多线程差,但是redis为什么就快了,这主要得益于以下几个原因: 1.纯内存访问,redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是redis达到每秒万级 ...

  8. 关于动态内存malloc和realloc

    1.malloc   1.申请的内存长度可以运行时决定,单位是字节  2.申请的内存为连续的内存空间  3.返回的地址可以根据实际需要强转成对应的类型  4.动态申请内存的生命周期是整个程序,除非手动 ...

  9. 在子页面操作父页面元素和iframe说明

    实现功能:在子页面操作父页面元素. 在实际编码的过程中,大家一定有这种需求:在父级页面有一个<iframe scrolling='auto'></iframe>内联框架,而我们 ...

  10. MySQL 列,可选择的数据类型(通过sql命令查看:`help create table;`)

    MySQL 列,可选择的数据类型(通过sql命令查看:help create table;) BIT[(length)] | TINYINT[(length)] [UNSIGNED] [ZEROFIL ...