`
xiaominghimi
  • 浏览: 51909 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!

 
阅读更多


Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢。

原文地址:http://blog.csdn.net/xiaominghimi/archive/2011/01/02/6113019.aspx

对于游戏中的数据进行保存方式,在Android中常用的有四种保存方式,这里我先给大家统一先简单的介绍下:

1. SharedPreference

此保存方式试用于简单数据的保存,文如其名属于配置性质的保存,不适合数据比较大的保存方式;

2. 文件存储 (FIleInputStream/FileOutputStream)

此保存方式比较适合游戏的保存和使用,可以保存较大的数据,因为相对于SQLite来说更容易让童鞋们接受,此方式不仅能把数据存储在系统中也能将数据保存到SDcard中;

3.SQLite

此保存方式比较适合游戏的保存和使用,可以保存较大的数据,并且可以将自己的数据存储到文件系统或者数据库当中,也可以将自己的数据存储到SQLite数据库当中,也能将数据保存到SDcard中;

4.ContentProvider (不推荐用于游戏保存)

此保存方式不推荐用于游戏保存,因为此方式不仅能存储较大数据,还支持多个程序之间就的数据进行交换!!! 但是由于游戏中基本就不可能去访问外部应用的数据,所以对于此方式我不予讲解, 有兴趣的可以去自行百度 google 学习;

以上简单的对几种常用的保存方式进行的概述,那么,下面会详细的去分析每个的优缺点以及每种保存的实现和需要注意的地方!

下面我首先向大家介绍第一种保存方式:

保存方式之: 《SharedPreference》


优点: 简单、方便、适合简单数据的快速保存

缺点:1.存数的文件只能在同一包内使用,不能在不同包之间使用!

2.默认将数据存放在系统路径下 /data/data/com.himi/ ,没有找到放SD卡上的方法。

总结:其实本保存方式如同它的名字一样是个配置保存,虽然方便,但只适合存储比较简单的数据!

main.xml :

先把xml文件放上来的原因是因为我在此篇中介绍的SharedPreference 和文件存储 (FIleInputStream/FileOutputStream),都共用此xml,很简单,两个textview 两个 editview 以及两个button,这里就不多说了;

下面是SharedPreference 的代码实现和详细讲解:

代码中的注释的很清楚了,比较简单,不多说了。


保存方式之:《文件存储 OutputStream/InputStream》

优点: 1.适合游戏存储,能存储较大数据;

2.不仅能存储到系统中,也能存储到SD卡中!

总结:如果童鞋们对SQL不太熟习的话那么选择此种方式最为合适的啦、嘿嘿

以上代码中实现了两种流形式来完成写入和读入,这里我们为什么要使用Data流来包装,其实不光是获得更多的操作方式,最主要的是方便快捷,你比如用file来读入的时候,明显的复杂了一些不说,它还一次性把所有数据都取出来了,不便于对数据的处理!

强调的有几点:

1: 在一开始对数据的访问再次提醒童鞋们,这个跟sharedPreference的获取方式不一样,sharedPreference 的获取方式可以得到一个默认的值,但是你用咱们获取的是个文件 而且直接就去open这个文件,一旦不存在必定异常,所以这一块的异常处理,以及finally的处理一定要处理得当。

2.其实在一开始用data包装的时候发现写入的字符串在读入的时候发现字符乱码了,查了api才发现,api规定当写入字符串的时候必须写入UTF-8格式的编码,但是后来不知道怎么了就没事了。 - -、所以这里如果童鞋们遇到此问题,我给出大家一个解决方法,就是在写入的时候我们不要去DataOutputStream 来包装而是用,OutputStreamWriter ,因为在构造的可以设定编码!

OutputStreamWriter osw = new OutputStreamWriter(fis,"UTF-8");

Stringcontent = EncodingUtils.getString(buffer,"UTF-8"); 这个也能把字符数组转码制!

这样写入的就肯定是UTF-8编码的字符啦、

下面介绍如何把我们的数据通过 OutputStream/InputStream 存入SD卡中!

其实将我们的数据放入SD卡中,无疑就需要对代码进行两处的修改:

注意:一定要有SD卡!对于如何创建SD卡在前一篇文章中已经说了两种方式,不会的童鞋可以去看下;

第一:检查是否装有SD卡;

第二: 修改读入的地方(备注1)

fis = this.openFileInput("save.himi"); //这里没有路径,路径是默认的 data-data-com.himi-files下

替换成我们的SD卡的路径就可以了:

File path = new File("/sdcard/himi/save.himi");//这里新建一个File目录路径

fis = new FileInputStream(path);传入路径

第三: 修改写入的地方(备注2)

fos = this.openFileOutput("save.himi", MODE_PRIVATE);这里也是默认路径,需要对其修改,

注意:这里修改了,那么在finally中的判定大家也要对应的适当修改;

注意:如果是系统路径,当没有此文件的时候,android 会默认创建一个!但是我们放入SD卡的时候要自己创建目录路径和文件!


第四: 因为我们要在SD卡中进行写入的操作,所以要在配置文件中声明权限!

AndroidMainfest.xml

这一句就是啦~

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

为了让大家看到所放的位置,所以把整个xml放出来供参考;

那么当创建路径和文件的时候,我们对其检查SD卡中是否已经存在exists()方法 ,如果已经存在就不去创建,这样避免下次再次写入数据的时候又新建了文件和路径、

其实我们在可以在启动程序的时候判断如果没有此文件,我们可以直接紧接着创建一个文件,这些都属于优化上的了,我主要是让大家引入,学会,那么其他的简化啦,优化啦,其他方式去实现啦都留给各位同学自己了、


OK、今天就先介绍到这里,后面会单独剖析SQLite如何存入数据,以及对数据操作的! 希望大家继续关注!

(推荐大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)

本篇源码:http://download.csdn.net/source/2959100

新的一年了小明祝福大家新的一年里,事业顺利,身体健康,全家幸福美满!

上张本项目的截图:


分享到:
评论

相关推荐

    Android数据存储之SharedPreference

    在Android应用开发中,数据存储是一项至关重要的任务,它使得应用程序可以持久化用户数据或应用程序状态。 SharedPreference是Android提供的一种轻量级的数据存储机制,主要用于存储键值对(key-value pairs)的数据...

    android studio文件存储和sharedPreference存储

    在Android开发中,数据存储是应用必不可少的一部分,用于持久化用户数据或应用程序的状态。本教程主要探讨在Android Studio中如何实现文件存储和SharedPreferences存储,以QQ登录为例,讲解如何保存登录的用户名和...

    Android游戏保存之SharedPreference使用Demo源码.rar

    在Android游戏开发中,数据保存是一项重要的任务,它能让用户在退出游戏后依然能保留进度。其中,SharedPreference是Android提供的一种轻量级的数据存储方式,特别适合用来保存游戏的简单配置信息或用户状态。本Demo...

    android SharedPreference实现登录

    在Android应用开发中,数据存储是一项重要的任务,用于保存用户数据、应用状态或者配置信息等。其中,`SharedPreference` 是一种轻量级的数据存储方式,特别适合用来存储一些简单的键值对数据,如登录状态、用户偏好...

    Android应用源码之(游戏保存之SharedPreference).zip

    在Android应用开发中,数据存储是一项重要的任务,它允许应用程序保存和恢复用户的设置或游戏进度。本主题将深入探讨如何使用`SharedPreference`在Android游戏中实现数据持久化,特别是关于游戏保存的功能。`...

    安卓Android源码——(游戏保存之SharedPreference).zip

    本资源“安卓Android源码——(游戏保存之SharedPreference)”提供了关于如何利用SharedPreference在游戏中保存数据的实例代码。 SharedPreference是基于键值对(key-value pairs)的存储方式,数据类型主要包括字符...

    Android应用开发-SharedPreference存储数据.pptx

    在Android应用开发中,SharedPreference是一种轻量级的数据存储机制,主要用于存储应用的配置参数或者简单的用户设置。它以键值对(key-value pairs)的形式保存数据,并且这些数据是以XML格式存储在设备的文件系统...

    安卓Android源码——(游戏保存SharedPreference).rar

    在安卓开发中,SharedPreference是应用中常用的一种轻量级数据存储方式,它主要用于存储一些简单的键值对数据,如用户设置、游戏进度等。在"安卓Android源码——(游戏保存SharedPreference)"这个项目中,我们将深入...

    android Sharedpreference的例子代码

    在Android开发中,SharedPreference是一种轻量级的数据存储机制,用于保存和读取小型的键值对数据。它非常适合用来存储应用的用户设置或者一些简单的持久化数据,比如开关状态、首选项等。在这个"android ...

    Android应用源码之(游戏保存之SharedPreference)-IT计算机-毕业设计.zip

    在Android应用开发中,SharedPreference是用于存储轻量级数据的一种机制,尤其适用于保存用户设置或游戏进度等简单数据。这个“Android应用源码之(游戏保存之SharedPreference)”的项目是一个很好的学习资源,它展示...

    安卓Android源码——(游戏保存SharedPreference).zip

    在安卓(Android)平台上,开发游戏或其他应用时,经常需要保存用户的进度、设置或其它持久化数据。 SharedPreference 是 Android SDK 提供的一种轻量级的数据存储机制,常用于存储键值对类型的数据,如字符串、布尔...

    Android-一个比较安全的SharedPreference加密方案

    在Android应用开发中,SharedPreference通常用于存储轻量级的数据,如用户偏好设置或小量配置信息。然而,由于其明文存储的特性, SharedPreference中的数据可能存在被恶意读取的安全风险。为了解决这个问题,我们...

    Android存储方式实例教程

    操作方式与普通java相似,即打开一个FileInputStream/FileOutPutStream,转成InputStream/outPutStream 然后读/写字节. SharedPrefreence主要用来存储简单数据类型. 不能存文件也不适合,比如QQ第一次登陆后可以保存...

    4-16-1(游戏保存之SharedPreference).zip

    在Android开发中,SharedPreference是用于存储轻量级数据的一个重要工具,尤其适用于保存用户设置或游戏进度等简单数据。这个“4-16-1(游戏保存之SharedPreference).zip”很可能是一个教学资料或者示例项目,展示了...

    从零开始Android游戏编程(第二版)PDF版

    8. **存储与数据持久化**:游戏可能需要保存用户进度或高分记录,这需要了解SQLite数据库或者SharedPreference等数据存储方式。 9. **网络编程**:如果游戏需要在线功能,如多人对战或实时更新,那么网络编程知识就...

    Android程序设计-数据存储SharedPreference.pptx

    在Android程序设计中,数据存储是一个关键部分,而`SharedPreferences`是Android系统提供的一种轻量级的数据存储机制,特别适合用于存储少量的配置信息。`SharedPreferences`采用键值对(key-value pairs)的形式,...

    Android中SharedPreference详解及简单实例

    Android中SharedPreference详解  SharedPreference是Android提供的一种轻量级的数据存储方式,主要用来存储一些简单的配置信息,例如,默认欢迎语,登录用户名和密码等。其以键值对的方式存储,使得我们能很方便进行...

    4-16-1(游戏保存之SharedPreference).7z

    在Android开发中,游戏数据的保存是一个非常关键的环节,特别是在玩家进度、设置选项或个性化内容等方面。 SharedPreference是Android提供的一种轻量级的数据存储机制,用于存储键值对(key-value pairs)类型的数据...

    Android游戏开发系列博文1-19源码免费共享,,童鞋们请评分!

    3. **SaveData**:保存数据是游戏开发中的关键部分,可能介绍了Android中的数据存储方法,如SharedPreferences用于轻量级数据存储,或者使用SQLite数据库来持久化更复杂的数据结构。 4. **触屏手势识别GestureTest*...

Global site tag (gtag.js) - Google Analytics