zoukankan      html  css  js  c++  java
  • Android开发——数据存储之ContentProvider(1)

    一、Android中四种数据存储方式

    1、SharePreferences: 一种轻量级的数据存储方式,采用键值对的方式存储。最终还是以文件的方式存储。主要用了应用的配置,类型window中常见的*.ini文件。数据不共享,只能提供给一个应用使用。

    2、SQLite:一个用于移动设备,小而强大的数据库。数据可以共享。

    3、文件存储:就是文件操作咯。一般用了体积较大的文件,比如图片。

    4、ContentProvider: 提供一种各个应用之间数据共享机制。以URI的形式提供访问地址。比如 content://contacts/people(有点REST的感觉) 可以访问系统中的联系人列表。这里的URI就可以用来构造Intent对象了。ContentProvider的数据存储是多种多样的,可以用数据库,文件,甚至是存放在网络的某个地方。

    在Android中,注册一个ContentProvider,不单单是注册一个共享数据源,还包括数据源对应的Activity。所以Intent(action,Uri),由action和uri共同决定“目的地”。

    示例代码一:

       1: btn.setOnClickListener(new View.OnClickListener() {
       2:             public void onClick(View view) {
       3:                 Log.d(TAG, "startActivityForResult");
       4:                 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people"));
       5:                 startActivityForResult(i, PICK_REQUEST);
       6:             }
       7:         });

    如上代码,在任何应用任何地方,执行以上代码,结果都是一样的,就是现实联系人列表,如下图:

    device

    我们创建的ContentProvider,是一个独立的类型,实际上跟Activity是没有关系的,跟应用也没有没有。一旦在某个应用的AndroidMainfest.xml进行配置,并将此应用安装到Android系统中,activity就和ContentProvider进行关联,而且这种关联是多对多的关联,所以切换Activity的时候时而有多个activity可以选择。

    我不经意产生如下疑问有待解决:

    系统如何管理ContentProvider(Uri),以及它们对应的应用(Activity)之间的关系呢?

    二、创建一个ContentProvider

    1、创建属性对象

    示例代码二:

       1: package com.halzhang.android.provider;
       2:  
       3: import android.net.Uri;
       4: import android.provider.BaseColumns;
       5:  
       6: /**
       7:  * 属性对象
       8:  * 
       9:  * @author 张汉国
      10:  */
      11: public final class TodoList {
      12:  
      13:     public static final String AUTHORITY = "com.halzhang.android.provider.TodoList";
      14:  
      15:     private TodoList() {
      16:     }
      17:  
      18:     public static final class Todo implements BaseColumns {
      19:  
      20:         private Todo() {
      21:         }
      22:  
      23:         // content uri
      24:         public final static Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/todos");
      25:  
      26:         // mime类型
      27:         public final static String CONTENT_TYPE = "vnd.halzhang.cursor.dir/com.halzhang.android.todo";
      28:  
      29:         // 单个数据的MIME类型在android中是有Uri和MIME来指定唯一一个Content的
      30:         public final static String CONTENT_ITEM_TYPE = "vnd.halzhang.cursor.item/com.halzhang.android.todo";
      31:  
      32:         // 默认的排序方式
      33:         public final static String DEFAULT_SORT_ORDER = "modified DESC";
      34:  
      35:         public final static String TITLE = "title";
      36:  
      37:         public final static String CONTENT = "content";
      38:  
      39:         public final static String CREATED_DATE = "created";
      40:  
      41:         public final static String MODIFIED_DATE = "modified";
      42:     }
      43:  
      44: }
     

    ----------------------接下文----------------------------

  • 相关阅读:
    clientX和clientY属性需要注意的地方
    事件冒泡 --- 仿select下拉框
    body和document的梗
    完美运动框架
    仿flash运动框架
    多物体运动框架
    Computed Styles
    悬浮框
    【一起驴友】公司笔试
    Client Dimensions , offsetHeight , scrollTop 属性详解
  • 原文地址:https://www.cnblogs.com/halzhang/p/1746587.html
Copyright © 2011-2022 走看看