您的位置:首页 > 移动开发 > Android开发

Android开发——数据存储之ContentProvider(1)

2010-05-28 19:53 375 查看
[b]一、Android中四种数据存储方式[/b]

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:         });


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





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

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

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

[b]二、创建一个ContentProvider[/b]

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: }


----------------------接下文----------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: