当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Android为你提供了若干选项用于存储应用程序数据。选择何种方案时情况而定。比如,数据仅为你的应用所使用,或是可是为其他应用(以及用户)所共享。又比如,你的数据需要多少

Android为你提供了若干选项用于存储应用程序数据。选择何种方案时情况而定。比如,数据仅为你的应用所使用,或是可是为其他应用(以及用户)所共享。又比如,你的数据需要多少空间。

数据存储有以下几个选择:

Data_Storage#.E4.BD.BF.E7.94.A8.E5.85.B1.E4.BA.AB.E7.9A.84.E9.85.8D.E7.BD.AE_-_Using_Shared_Preferences|Shared Preferences|公共配置-Shared Preferences

通过键值对的方式存储私有的原始数据。

Data_Storage#.E4.BD.BF.E7.94.A8.E5.86.85.E9.83.A8.E5.AD.98.E5.82.A8_-_Using_the_Internal_Storage|Internal Storage|内部存储-Internal Storage

在存储器上存储私有的数据。

Data_Storage#.E4.BD.BF.E7.94.A8.E5.86.85.E9.83.A8.E5.AD.98.E5.82.A8_-_Using_the_Internal_Storage|External Storage | 外部存储 - External Storage

在外部存储器上存储公开的数据。

Data_Storage#.E4.BD.BF.E7.94.A8.E6.95.B0.E6.8D.AE.E5.BA.93_-_Using_Databases|SQLite Database | SQLite数据库 - SQLite Database

在私有的数据库中存储结构化的数据。

Data_Storage#.E4.BD.BF.E7.94.A8.E7.BD.91.E7.BB.9C.E8.BF.9E.E6.8E.A5_-_Using_a_Network_Connection|Network Connection | 网络连接 - Network Connection

使用你的网络服务器存储数据。

Android提供了暴露私有数据给其他应用的方法——使用一个内容提供器(content provider)。内容提供器是一个可选的组件,为你的应用程序数据提供读/写权限,并受制于你给定的限制。关于使用内容提供器的更多细节,请查看Content Providers的文档。

使用共享的配置 - Using Shared Preferences

SharedPreferences类提供了一个通用的框架,用于保存和检索以持久化的键值对形式存储的原始数据类型。你可以使用SharedPreferences保存任意类型的原始数据:布尔(boolean),浮点,(float),整型(int),长整型(long)和字符串(string)。这些数据将会存放在用户会话中(即使你的应用程序已经退出)。

* 用户配置*

共享的配置并非一定要保存"用户配置",例如用户选择和哪个铃声。如果你有兴趣为你的应用创建用户配置,请参考PreferenceActivity。它提供了一个Activity的框架,可以用来创建持久化的用户配置(使用共享的配置)。

在应用程序中取得SharedPreferences对象,使用以下两种方法之一:

* int) getSharedPreferences() getPreferences()](http://developer.android.com/reference/android/content/Context.html#getSharedPreferencesjava.lang.String,)( - 当你仅需要一个配置文件。由于这是你的Activity的唯一一个配置文件,所以不必提供名称。

向SharedPreferences写入值的步骤:

1、调用edit(),取得一个SharedPreferences.Editor。

2、使用形如boolean) putBoolean() putString()](http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#putStringjava.lang.String,)这样的方法添加值。(

3、使用commit()提交新值。

从SharedPreferences读取值,使用它的方法,例如boolean) getBoolean() getString()](http://developer.android.com/reference/android/content/SharedPreferences.html#getStringjava.lang.String,)即可。(

这是一个例子,在一个计算器中使用无声的按键保存一个配置:

class extends { static String PREFS_NAME ; protected (){ .onCreate); . // Restore preferences "color:#660">(PREFS_NAME0boolean silent settings(, ); setSilent); @Override void onStopsuper(); // All objects are from android.context.Context "color:#660">(PREFS_NAME0SharedPreferencesEditor editor settings(); editor(, mSilentMode// Commit the edits! editor(); }

使用内部存储 - Using the Internal Storage

你可以直接将文件保存在设备上的内部存储中。缺省情况下,存放于内部存储的文件为你的应用程序所私有,其他应用程序不能够访问它们(其他用户亦然)。当用户卸载你的应用,这些文件也被删除。

在内部存储中创建并写入一个私有文件:

1、调用openFileOutput(),传入文件名和操作模式。方法返回一个FileOutputStream对象。

2、使用write()写文件。

3、使用close()关闭文件流。

例如:

"color:#080">"hello_file"String "color:#080">"hello world!"FileOutputStream fos openFileOutput, .MODE_PRIVATE.writestring());fos();

MODE_PRIVATE创建文件(或以同名文件替换),并为你的应用所私有。其他可用的模式有:MODE_APPEND, MODE_WORLD_READABLE, 和MODE_WORLD_WRITEABLE。

从内部存储中读一个文件:

1、调用openFileInput(),并传递需要读取的文件的名称。这个方法返回一个FileInputStream。

2、使用read()从文件中读取数据。

3、使用close()关闭文件流。

提示:如果你想在编译时往你的应用中存入一个静态文件,就得把文件保存到项目的res/raw目录下。你可以调用openRawResource()并传递资源的ID(R.raw.)来打开它。这个方法返回一个InputStream,你可以使用它读取文件,但不能够写入这个原始文件。

保存缓存文件

如果你想要缓存一些数据,而不是保存它们,你应该调用getCacheDir()打开一个File对象,它表示你的应用应当保存临时缓存文件的内部目录。

其他有用的方法

getFilesDir() 取得内部文件在文件系统中保存位置的绝对路径。

getDir() 创建(或者打开已存在的)内部存储空间所在的目录。

deleteFile() 删除内部存储的一个文件。

fileList() 返回当前由你的应用保存的文件的列表。

使用外部存储 - Using the External Storage

所有兼容Android的设备都支持一个可共享的“外部存储(external storage)”,可用来保存文件。这可以使一个可移动的存储设备(比如SD卡)或者一个内部的(不可移动的)存储。保存在外部存储的文件是可读的。并且当用于传输数据的USB大容量存储选项启用时,用户能够在计算机上修改它们。

注意:* 如果用户挂载外部存储到计算机上,或者移除媒体,外部文件将会消失不见。并且对于这些保存在外部存储的文件,没有强制的安全措施。所有的应用都可以读/写这些文件。用户也能够删除它们。

检测媒体可用性

在你对外部存储做任何事情之前,你总是应当调用getExternalStorageState()以检测媒体是否可用。媒体可能被计算机挂载,可能丢失,可能只读,或者处于某些其他状态。比如,这是示例代码:

"color:#008">falseboolean mExternalStorageWriteable ;"color:#606">Environment();(.MEDIA_MOUNTED(state{ "color:#660">"color:#008">true} if Environment.equals)) // We can only read the media mExternalStorageAvailable ; mExternalStorageWriteable ;else // Something else is wrong. It may be one of many other states, but all we need "color:#660">"color:#008">false}

这个例子检测了外部存储是否可读或可写。getExternalStorageState()方法返回你想要检测的其他状态。比如,媒体是否被共享(已连接到一台计算机),是否完全丢失,是否被移除等等。当你的应用需要访问媒体时,你可以依据这些以更详细的信息通知用户。

访问位于外部存储的文件

如果你正在使用API Level 8或者更高版本,使用getExternalFilesDir()打开一个文件对象,它表示你的应用应当保存文件所在的外部存储目录。这个方法需要一个类型参数,指定你需要的子目录类型,比如DIRECTORY_MUSIC或者DIRECTORY_RINGTONES(传递null表示你的应用程序的目录所在的根目录)。如有必要,这个方法将会创建一个目录。通过指定目录的类型,你确信Android的媒体扫描器会将系统中的文件正确分类(例如,铃声将被归类为铃声而不是音乐)。如果用户卸载了你的应用,这个目录以及它的内容将会被删除。

如果你正在使用API Level 7或者更低版本,使用getExternalStorageDirectory()打开一个文件对象,它表示外部存储的根目录。接下来,你应当写入你的数据在一下目录:

/Android/data//files/

"com.example.android.app"。如果用户的设备正在运行API Level 8或者更高版本,且用户卸载了你的应用,这个目录和它的内容将会被删除。

保存应当共享的文件

在媒体扫描器下隐藏你的文件

在你的外部文件目录中放置包括一个空的文件,命名为.nomedia(注意文件名前缀的点)。这会阻止Android的媒体扫描器读取你的媒体文件,并并在类似Gallery或者Music这样的应用中包括它们。

如果你想要保存与你的应用没有关联的文件,并且这些文件不应在应用卸载时被删除,把他们保存在外部存储的一个公共目录上即可。这些目录位于外部存储的根目录下,比如Music/, Pictures/, Ringtones/,以及其它目录。

在API Level 8或者更高版本,调用getExternalStoragePublicDirectory(),传递你需要的公共目录的类型,比如DIRECTORY_MUSIC, DIRECTORY_PICTURES, DIRECTORY_RINGTONES或者其它。如有必要,这个方法会创建新目录。

如果你正在使用API Level 7或者更低版本,调用getExternalStorageDirectory()打开一个File,它表示外部存储的根目录。接着保存你的共享文件在以下文件夹之一:

Music/ - 媒体扫描器把所有在此发现的媒体归类为用户的音乐。

Podcasts/ - 媒体扫描器把所有在此发现的媒体归类为播客。

Ringtones/ - 媒体扫描器把所有在此发现的媒体归类为铃声。

Alarms/ - 媒体扫描器把所有在此发现的媒体归类为闹铃。

Notifications/ - 媒体扫描器把所有在此发现的媒体归类为提示音。

Pictures/ - 所有照片(相机拍摄的除外)。

Movies/ - 所有影片(摄像机拍摄的除外)。

Download/ - 各类下载。

保存缓存文件

如果你正在使用API Level 8或者更高版本,调用getExternalCacheDir()打开一个File,它表示你的应用应当保存文件所在的外部存储目录。如果用户卸载了你的应用,这些文件会被自动删除。然而,在你的应用的生命周期中,你应当管理这些缓存文件以及删除其中过期的部分以保证文件空间。

如果你正在使用API Level 7或者更低版本,使用getExternalStorageDirectory()打开一个File,它表示外部存储的根目录。接下来,你应当写入你的数据在一下目录:

/Android/data//files/

"com.example.android.app"。

使用数据库 - Using Databases

Android提供了对SQLite数据库的完整支持。你创建的任何数据库都能被应用程序中的任意类通过数据库名访问。但是不能够在应用程序以外访问。

推荐的创建新的SQLite数据库的方法是,在你执行SQLite命令在数据库中创建表的时候,创建一个SQLiteOpenHelper的子类,并重写onCreate()方法。例如:

class extends { static int DATABASE_VERSION ; static String DICTIONARY_TABLE_NAME ; static String DICTIONARY_TABLE_CREATE + DICTIONARY_TABLE_NAME " (" + + KEY_DEFINITION " TEXT);"DictionaryOpenHelperContext context{ (context, , DATABASE_VERSION} public () .execSQL); }

接着,你可以使用构造方法取得你实现的SQLiteOpenHelper的一个实例。分别使用getWritableDatabase()和getReadableDatabase()读写数据库。两者都会返回一个SQLiteDatabase对象,代表那个数据库,并提供操作SQLite的方法。

Android没有在标准SQLite概念之外加以任何限制。我们建议包含一个自增值的主键字段,能够作为一个唯一的ID,以便快速定位一条记录。这对私有数据来说不是必须的。但如果你实现了一个content provider,就必须包含一个唯一的ID,它使用BaseColumns._ID常量。

你可以使用SQLiteDatabase.query()方法执行SQLite查询,这个方法接受各种查询参数,例如待查询的表、投影、选择、列、组,或者其他。对于复杂查询,比如一些需要用到列的别名的,你应当使用SQLiteQueryBuilder,它能提供一些合适的方法以创建查询。

每一个SQLite查询都会返回一个Cursor对象,指向查询得到的所有行。Cursor对象总是你用来取得数据库查询或者读取行或列的结果的途径。

关于示例应用中演示如何在Android中使用SQLite数据库,见Node Pad和Searchable Dictionary这两个应用。

数据库调试

Android SDK包含了一个sqlite3的数据库工具,允许你浏览表内容,运行SQL命令,以及执行其他SQLite数据库中有用的功能。想要了解如何运行这个工具,请查看Examining sqlite3 databases from a remote shell这个例子。

使用网络连接 - Using a Network Connection

你可以使用网络连接(当可用时)通过基于web的服务存储或取得数据。需要执行网络操作时,使用以下包中的类:

java.net.*

android.net.*

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

NAS这些年可吸引了不少数码发烧友的注意,但也渐渐在家庭用户中风靡。究其原因,大概还是因为太多人因为现在数据过于庞大,而一个NAS基本上就能解决一个家庭的数据存储难题。在这一背景下,铁威马F4-424 Pro凭借其出色的...

关键字: NAS 数据存储 处理器

在数字生活日益丰富的今天,家庭照片、工作文档、影音资料等海量数据如同洪水猛兽般袭来,如何妥善管理这些宝贵的数据,让它们既安全又易于访问,成为了我们不得不面对的问题。铁威马,作为一家在NAS领域深耕多年的老牌厂商,其产品一...

关键字: 铁威马NAS 数据存储

时至今日,我们越来越依赖数字数据来记录生活的点滴和工作的成果。然而,随着数据的不断累积,我们时常会遇到一个问题:网盘空间不够用。此外,网盘的安全性也是我们关注的焦点,一旦网盘服务商出现问题或数据泄露,我们的宝贵数据就可能...

关键字: 数据存储 硬盘

数据日益成为企业业务的驱动力,伴随该趋势,保护数据以防丢失、受损和盗用变得更为重要,并已上升为企业高管关注的头号课题。恶意软件是导致数据丢失的首要原因,而勒索软件则是其中最常见的一个软件类型,它擅长利用坚不可摧的加密技术...

关键字: 数据安全 宕机 数据存储

罗德与施瓦茨与SmartViser携手开发了一种用于测试符合欧盟销售的智能手机和平板电脑的新Energy Efficiency Index(EEI)标签法规的解决方案。该解决方案的核心是R&S CMX500,这是...

关键字: 智能手机 Android iOS

新一代S1500 Pro为微电子和光电子制造应用中的自动化制造流程提供增强型接口和控制功能

关键字: 自动化 数据存储 LCD触摸屏

北京——2023年12月4日 亚马逊云科技在2023 re:Invent全球大会上,宣布推出一系列新的集成解决方案,旨在帮助客户迅速而轻松地连接和分析数据,而无需构建和管理复杂的提取、转换和加载(ETL)数据管道。通过全...

关键字: 数据存储 数据库 人工智能

满足PCI-DSS合规标准,实现安全数据统一管理和多样化分析,极大提升安全能力和效率

关键字: 物联网 数据存储 数据管理

随着科技的不断发展,刻录机作为数据存储和备份的重要工具,越来越受到人们的关注。在选购刻录机时,我们需要从多个方面着手,确保选择到优质的产品。本文将向大家介绍选购好的刻录机产品的方法,从品牌、性能、接口类型、兼容性、服务及...

关键字: 刻录机 数据存储

全闪存存储的历史性时刻到来! 北京2023年8月30日 /美通社/ -- Gartner最新数据显示,2023年第一季度全球外部存储市场同比增长0.5%;其中,全闪存阵列同比增长3.6%,市场规模超过非全闪存阵列,占整...

关键字: 数据中心 数据存储 节点 机械硬盘
关闭
关闭