zoukankan      html  css  js  c++  java
  • 使用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>
  • 相关阅读:
    Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)
    Educational Codeforces Round 82 (Rated for Div. 2) A-E代码(暂无记录题解)
    微信小程序项目踩过的几个坑
    人工智能入门
    2017,知识与财富
    Cesium中Clock控件及时间序列瓦片动态加载
    Cesium基础使用介绍
    geotrellis使用(三十五)Cesium加载geotrellis TMS瓦片
    PhiloGL学习(6)——深情奉献:快乐的一家
    PhiloGL学习(5)——神说要有光,便有了光
  • 原文地址:https://www.cnblogs.com/thinfog/p/5643395.html
Copyright © 2011-2022 走看看