技术与热点应用 您所在的位置:电子展览网 > 行业资讯 > 技术与热点应用 > 手机设计与制造

Android SDK 开发之数据存储




关键词:

  数据存储

  一个典型的桌面操作系统提供了一个通用文件系统, 应用程序可以使用它来储存文件, 这些文件可以被其它应用程序来读取(文件系统可能会有一些访问控制方面的设置). Android使用一个不同的系统: 在android上, 所有的应用程序数据(包括文件)是应用程序私有的.

  此外, android也提供了一个让应用程序将其数据提供给其它应用程序使用的标准方案 -- 通过content provider. content provider是应用程序的一个可选组件, 它将属于应用程序的数据暴露出来, 使其在一定的限制下可被其它程序存取. content provider实现了一套请求和修改数据的标准语法, 和一个标准的读取返回数据的机制. android为一些标准数据类型,例如图像,声音,视频文件和联系人信息等提供了一些预置content provider. 详见Content Providers的单独文档.

  无论你是否希望将你的应用程序的数据暴露给其他人, 你都需要一种储存它的方法. android提供了以下四种存取数据的机制: 程序选项, 文件, 数据库和网络.

  Preferences 程序选项

  程序选项是一个轻量级的存取基本数据类型的键-值对的机制. 它一般用于储存程序的选项, 例如一个默认的欢迎消息, 或者程序默认字体等等. 使用Context.getSharedPreferences()来读写选项值. 如果你希望将选项参数和同程序内的其它组件共享, 那么为你的选项组取一个名字, 或者使用 Activity.getPreferences(), 这样选项是发起调用的activity私有的. 你不能将程序选项跨应用程序访问(除非使用一个content provider).

  这里是一个为计算器设置无声按键模式的例子:

  import android.app.Activity;

  import android.content.SharedPreferences;

  public class Calc extends Activity {

  public static final String PREFS_NAME = "MyPrefsFile";

  . . .

  @Override

  protected void onCreate(Bundle state){

  super.onCreate(state);

  . . .

  // Restore preferences

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

  boolean silent = settings.getBoolean("silentMode", false);

  setSilent(silent);

  }

  @Override

  protected void onStop(){

第1页 第2页 

  数据存储

  一个典型的桌面操作系统提供了一个通用文件系统, 应用程序可以使用它来储存文件, 这些文件可以被其它应用程序来读取(文件系统可能会有一些访问控制方面的设置). android使用一个不同的系统: 在android上, 所有的应用程序数据(包括文件)是应用程序私有的.

  此外, android也提供了一个让应用程序将其数据提供给其它应用程序使用的标准方案 -- 通过content provider. content provider是应用程序的一个可选组件, 它将属于应用程序的数据暴露出来, 使其在一定的限制下可被其它程序存取. content provider实现了一套请求和修改数据的标准语法, 和一个标准的读取返回数据的机制. android为一些标准数据类型,例如图像,声音,视频文件和联系人信息等提供了一些预置content provider. 详见Content Providers的单独文档.

  无论你是否希望将你的应用程序的数据暴露给其他人, 你都需要一种储存它的方法. android提供了以下四种存取数据的机制: 程序选项, 文件, 数据库和网络.

  Preferences 程序选项

  程序选项是一个轻量级的存取基本数据类型的键-值对的机制. 它一般用于储存程序的选项, 例如一个默认的欢迎消息, 或者程序默认字体等等. 使用Context.getSharedPreferences()来读写选项值. 如果你希望将选项参数和同程序内的其它组件共享, 那么为你的选项组取一个名字, 或者使用 Activity.getPreferences(), 这样选项是发起调用的activity私有的. 你不能将程序选项跨应用程序访问(除非使用一个content provider).

  这里是一个为计算器设置无声按键模式的例子:

  import android.app.Activity;

  import android.content.SharedPreferences;

  public class Calc extends Activity {

  public static final String PREFS_NAME = "MyPrefsFile";

  . . .

  @Override

  protected void onCreate(Bundle state){

  super.onCreate(state);

  . . .

  // Restore preferences

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

  boolean silent = settings.getBoolean("silentMode", false);

  setSilent(silent);

  }

  @Override

  protected void onStop(){

第1页 第2页 

  接上页

  super.onStop();

  // Save user preferences. We need an Editor object to

  // make changes. All objects are from android.context.Context

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

  SharedPreferences.Editor editor = settings.edit();

  editor.putBoolean("silentMode", mSilentMode);

  // Don't forget to commit your edits!!!

  editor.commit();

  }

  }

  Files 文件

  你可以直接将文件保存在移动设备上,或者在一个可移动存储设备上. 默认情况下, 其它的应用程序无法访问这些文件.

  为从文件读取数据, 调用Context.openFileInput()然后将文件路径和名称传给它. 它将返回一个标准的Java FileInputStream 对象. 要向文件写入数据, 使用Context.openFileOutput(), 并 传入文件名来. 它将返回一个FileOutputStream对象. 试图从另一个程序来调用这些方法读写相同的文件名是不行的; 你只能访问本地文件.

  如果你在编译期有一个静态文件和你的程序一同打包, 你可以将这个文件保存为 res/raw/myDataFile, 然后使用Resources.openResource(R.raw.myDataFile)来读取. 它将返回一个InputStream对象, 你可以用这个对象来从文件读数据.

  Databases 数据库

  android API包含对创建和使用SQLite数据库的支持. 每个数据库为创建它的应用程序私有.

  SQLiteDatabase 对象代表一个数据库, 并且有用来与它交互的方法 -- 查询和管理数据等. 要创建一个数据库, 调用SQLiteDatabase.create()并且创建一个SQLiteOpenHelper的子类.

  作为SQLite数据库系统支持的一部分, android暴露出数据库管理的函数, 它们让你可以将复杂的数据储存在有用的对象中. 例如,android为联系人信息定义了一个数据类型; 该数据类型包含姓名, 地址, 电话号码, 照片以及其它描述一个人的信息.

  android内置sqlite3数据库工具, 它使你能够浏览表内容, 运行sql命令,以及运行其它sql数据库的功能. 详见Examine databases文档.

  所有的数据库, 包括sqlite和其它的, 都被储存在设备上的/data/data/package_name/databases中.

  需要创建多少个表, 每张表包含多少数据, 它们如何连接不在本文档的讨论范围之内. 但是android并不会在SQLite概念之外施加任何约束. 我们推荐包含一个自动增加的键作为一个唯一的id来快速索引记录. 这个对于私有数据是不必要的, 但是如果你实现一个content provider, 那么你必须包含这样一个唯一的id域. 关于这类问题的详细讨论可以参看Content Providers文档, 以及NotPad示例代码的NotePadProvider类.

  Network 网络

  你也可以使用网络来存取数据. 使用以下包内的类:

  java.net.*

  android.net.*

第1页 第2页 

分享到:
收藏 打印
相关新闻
  • 没有相关信息!