2022年Android官方开发教程中文版 .pdf
《2022年Android官方开发教程中文版 .pdf》由会员分享,可在线阅读,更多相关《2022年Android官方开发教程中文版 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Android官方开发教程中文版维信科技保存数据保存数据大部分 Android 应用都需要保存数据, 即使只是在 onPause() 期间不让用户进度丢失而保存状态信息。大部分有意义的App 还需要保存用户设置,某些App必须管理大量来自于文件和数据库的信息(维信科技提供)。本课程介绍 Android中保存数据的主要方式。包括:简单数据保存到参数文件中的键值对。保存到 Android 文件系统的任意文件中。使用 SQLite数据库管理。保存键值对集合如 果 你 有 一 个 想 保 存 的 、 相 对 较 小 的 键 值 对 集 合 , 你 应 用 使 用SharedPreferences AP
2、I 。 SharedPreferences 对象指向一个包含了键值对的文件并提供一些简单的方法以读写它们。 每个 SharedPreferences文件由框架管理, 可以设为私有或共享。本课程展示如何使用SharedPreferences API 储存相对简单的数据。注意: SharedPreferences API 只读写键值对,不要把它和 Preference API混淆,Preference API是为 App 设置构建用户界面(尽管在界面中使用SharedPreferences API来做为保存设置数据的实现) 。有关 Preference的更多信息,请参见“设置”指南。名师资料总结
3、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 获取 SharedPreferences 的句柄你可以创建新的参数文件或通过以下两个方法之一访问一个存在的参数文件:getSharedPreferences() 如果你需要从由名称标识的多个共享参数文件中,用方法的第一个参数指定一个,那么用这个。你可以从App 的任意上下文中调用它。getPreferences() 如果你需要为Activity 使用仅有的参数文件, 那么用这个。因为这会检索A
4、ctivity 默认的共享参数文件,你不需要提供名称。例如,下面的代码在一个Fragment 中执行,它访问了一个由资源字符串R.string.preference_file_key标识的参数文件,并且用私有模式打开它,因此这个文件只能由你的 App 访问(维信科技提供) 。Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE); 命名 你
5、的 共 享 参数 文 件 时, 应该 使 用 唯一的 、 可识 别 的名 称。比 如“com.example.myapp.PREFERENCE_FILE_KEY” 。或者,如果你的Activity 就一个共享参数文件,你可以使用getPreference()方法:SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 警告:如果你 MODE_WORLD_READABLE或 MODE_WORLD_WRITEABLE创建共享参数文件,那么任何知道文件标识符的其它App 都可以访问你的数据。
6、写入共享参数写入共享参数文件,用SharedPreferences 对象的edit()方法创建一个名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - SharedPreference.Editor对象。把你要写入的键和值传递给putInt() 或 putString()之类的方法,然后调用commit()方法提交改变。如:SharedPreferences sharedPref = getActivity().getPrefere
7、nces(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score), newHighScore); mit();读取共享参数调用 getInt()或 getString()之类的方法从共享参数文件中检索值,提供一个你想要得到值的键,以及一个可选的、当键不存在时返回的默认值。如:SharedPreferences sharedPref = getActivity().getPreferences(Con
8、text.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.string.saved_high_score_default); long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue); 保存文件Android 使用的文件系统类似其它平台上的基于磁盘的文件系统。本节内容描述了 File API如何工作于 Android 文件系统以及读写文件。File 对象适合按从头到尾的、 不跳过任何内容的顺序, 读写大量
9、数据。例如,图像文件或任何通过网络交换的数据(维信科技提供)。本节内容展示了如何在你的App 中执行文件相关的基本任务。本节课假设你熟悉基本的 Linux 文件系统以及 Java.io中标准的文件输入输出API。选择内部或外部存储所有 Android 系统都有两个文件存储区: “内部”或“外部”。这些叫法来自名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - 早期 Android,大部分 Android 设备提供了内建的、非易失性
10、的存储器(内部储存) ,加上一个可移动的存储介质如微型SD卡(外部储存)。某些设备将永久储存空间划分为“内部”和“外部”分区,因此,就算没有可移动存储介质,也同样有两种存储空间和API行为,无论外部储存是否可移动。下表是对两种储存空间的总结:内容存储:总是可用的。存放在这里的文件默认情况只能被你的App 访问。当用户卸载你的 App 时, 系统会在内部存储中删除所有你的App 的文件。内部存储区最好用来存放你即不想让用户,也不想让其它 App 访问的文件。外部存储:不总是可用的,用户可以把外部存储器做为USB设备插入,也可以从设备上移除。它是“全世界可读的”(公开的),文件存放在这里会在你控制
11、之外被读取。当用户卸载你的App 时,只有保存在通过getExternalFilesDir() 方法获得的目录中的 App 文件才会被系统删除。外部存储区最好用来存放不需要限制访问,或是你想共享给其它App,或是允许用户通过电脑来访问的文件。提示:虽然 App 默认情况下是安装在内部存储区的,但你可以在清单文件中指定 android:installLocation 属性让你的 App安装在外部存储区上。 用户会喜欢这个选项的,当APK 的大小非常大,而用户有一个比内部存储区大得多的外部名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
12、- 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - 存储区时。详情请参考“应用安装位置” 。获得外部存储区权限要写入外部存储区,你必须在清单文件中请求WRITE_EXTERNAL_STORAGE权限: . 警告:目前,所有的App 都可以读取外部存储区而不需要指定权限。无论如何, 这将在未来的版本中改变。 如果你的 App 需要读取外部存储区(但不写入),你需要声明READ_EXTERNAL_STORAGE权限(维信科技提供)。要确保你的应用如期望中的那样继续工作,在更改生效之前,你应该立即声明这个权限。把文件保存到内部存储区中不需要任何
13、权限,应用程序任何时候在自己的内部存储区目录中都有权限读写文件。把文件保存到内部存储区当把文件保存到内部存储区时, 你可以通过下列两个方法之一获得文件对应的目录:getFilesDir() 为 App 返回表示内部目录的文件对象getCacheDir() 为 App 的临时缓存文件返回表示内部目录的文件对象。确保文件不再使用时删除它,并且在任何时候都为它执行一个合理的大小限制,比如1MB。如果系统检查到存储空间过低,它会删除你的缓存文件而不做任何警告。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
14、- - - 第 5 页,共 17 页 - - - - - - - - - 在这些目录中创建新的文件,你可以使用File()构造函数,传递通过上面的方法之一提供的,指定了内部存储目录的文件对象。如:File file = new File(context.getFilesDir(), filename); 或者,你也可以调用openFileOutput() 获得一个 FileOutputStream 来写入到你的内部目录中的文件。如:String filename = myfile; String string = Hello world!; FileOutputStream outputStr
15、eam; try outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(string.getBytes(); outputStream.close(); catch (Exception e) e.printStackTrace(); 又或者,如果你需要缓存某些文件, 你应该使用 createTempFile() (维信科技提供) 。下例中的方法从 URL中提取了文件名,并用这个文件名在内部缓存目录中创建了一个文件:public File getTempFile(Context con
16、text, String url) File file; try String fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir(); catch (IOException e) / Error while creating file return file; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页
17、,共 17 页 - - - - - - - - - 注意: App 的内部存储目录是在Android 文件系统的特定位置由App 的包名指定的。从技术上说,如果你把文件设置为可读,其它App 可以读取你的内部文件。但无论如何,其它App 还需要知道你的包名和文件名,其它App 不能浏览你的内部目录也没读写权限,除非你显示地把文件设为可读或可写(维信科技提供) 。所以只你对内部存储的文件使用MODE_PRIVATE,它们永远不可能被其它 App 访问。把文件保存到外部存储区因为外部存储区可能是不可用的(比如用户把存储器安装到电脑上,或把提供外部存储的SD 卡移除了),你应该总是在访问前验证卷(意
18、指磁盘的卷)是否允许。 你可调用 getExternalStorageState() 方法查询外部存储区的状态,如果返回状态值是MEDIA_MOUNTED ,那么你可以读写文件。下例的方法可用于判断外部存储是否可用:/* 检查外部存储是否允许读写*/ public boolean isExternalStorageWritable() String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) return true; return false; /* 检查外
19、部存储是否可读*/ public boolean isExternalStorageReadable() String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) | 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - Environment.MEDIA_MOUNTED_READ_ONLY.eq
20、uals(state) return true; return false; 尽管外部存储可以被用户和其它App 更改,你可以在上面保存两类文件:公共文件:文件对用户和其它App 是自由的,当用户卸载你的App 时,这些文件允许用户保留。例如,你的App 拍摄的相片或其它下载的文件。私有文件:文件当然属于你的App,用户卸载App 时会删除它们。由于它们在外部存储区上,这些文件从技术上说可以被用户和其它App 访问,但实际上不会为你的 App 之外的用户提供价值。当用户卸载你的App 时,系统删除所有外部私有目录中的文件。如被你的App 或临时媒体文件下载的额外资源。如 果 你想 在 外 部
21、存 储区 中 保 存 公 共文 件 , 使 用getExternalStoragePublicDirectory()方法获得表示外部存储区正确目录的文件对象。这个方法有一个指定要保存的文件类型的参数,这样它们可以和其它公共文件逻辑上组织到一起,比如DIRECTORY_MUSIC或 DIRECTORY_PICTURES(维信科技提供)。如:public File getAlbumStorageDir(String albumName) / 获得用户公共的图片目录File file = new File(Environment.getExternalStoragePublicDirectory(
22、Environment.DIRECTORY_PICTURES), albumName); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - if (!file.mkdirs() Log.e(LOG_TAG, Directory not created); return file; 如果你想把文件保存为App 私有的,你可调用 getExternalFilesDir()方法并且给它传递一个表示目录类型的名称。这种方式创建的目录添加
23、到父目录中,并封装了所有 App 的外部存储文件,当用户卸载App 时,它们被系统删除。例如,下面的方法可以用来创建个人相册的目录:public File getAlbumStorageDir(Context context, String albumName) / 获得 App 的私有图片目录File file = new File(context.getExternalFilesDir( Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs() Log.e(LOG_TAG, Directory not created);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Android官方开发教程中文版 2022 Android 官方 开发 教程 中文版
限制150内