Himi 原創(chuàng), 歡迎轉(zhuǎn)載,轉(zhuǎn)載請在明顯處注明! 謝謝。
原文地址: http://blog.csdn.net/xiaominghimi/archive/2011/01/02/6113019.aspx
對于游戲中的數(shù)據(jù)進(jìn)行保存方式,在Android中常用的有四種保存方式,這里我先給大家統(tǒng)一先簡單的介紹下:
1. SharedPreference
此保存方式試用于簡單數(shù)據(jù)的保存,文如其名屬于配置性質(zhì)的保存,不適合數(shù)據(jù)比較大的保存方式;
2. 文件存儲 (FIleInputStream/FileOutputStream)
此保存方式比較適合游戲的保存和使用,可以保存較大的數(shù)據(jù),因為相對于SQLite來說更容易讓童鞋們接受,此方式不僅能把數(shù)據(jù)存儲在系統(tǒng)中也能將數(shù)據(jù)保存到SDcard中;
3.SQLite
此保存方式比較適合游戲的保存和使用,可以保存較大的數(shù)據(jù),并且可以將自己的數(shù)據(jù)存儲到文件系統(tǒng)或者數(shù)據(jù)庫當(dāng)中,也可以將自己的數(shù)據(jù)存儲到SQLite數(shù)據(jù)庫當(dāng)中,也能將數(shù)據(jù)保存到SDcard中;
4.ContentProvider (不推薦用于游戲保存 )
此保存方式不推薦用于游戲保存,因為此方式不僅能存儲較大數(shù)據(jù),還支持多個程序之間就的數(shù)據(jù)進(jìn)行交換!!! 但是由于游戲中基本就不可能去訪問外部應(yīng)用的數(shù)據(jù),所以對于此方式我不予講解, 有興趣的可以去自行百度 google 學(xué)習(xí);
以上簡單的對幾種常用的保存方式進(jìn)行的概述,那么,下面會詳細(xì)的去分析每個的優(yōu)缺點以及每種保存的實現(xiàn)和需要注意的地方!
下面我首先向大家介紹第一種保存方式:
保存方式之: 《SharedPreference》
優(yōu)點: 簡單、方便、適合簡單數(shù)據(jù)的快速保存
缺點:1.存數(shù)的文件只能在同一包內(nèi)使用,不能在不同包之間使用!
2.默認(rèn)將數(shù)據(jù)存放在系統(tǒng)路徑下 /data/data/com.himi/ ,沒有找到放SD卡上的方法。
總結(jié):其實本保存方式如同它的名字一樣是個配置保存,雖然方便,但只適合存儲比較簡單的數(shù)據(jù)!
main.xml :
先把xml文件放上來的原因是因為我在此篇中介紹的SharedPreference 和文件存儲 (FIleInputStream/FileOutputStream),都共用此xml,很簡單,兩個textview 兩個 editview 以及兩個button,這里就不多說了;
下面是SharedPreference 的代碼實現(xiàn)和詳細(xì)講解:
代碼中的注釋的很清楚了,比較簡單,不多說了。
保存方式之:《文件存儲 OutputStream/InputStream》
優(yōu)點: 1.適合游戲存儲,能存儲較大數(shù)據(jù);
2.不僅能存儲到系統(tǒng)中,也能存儲到SD卡中!
總結(jié):如果童鞋們對SQL不太熟習(xí)的話那么選擇此種方式最為合適的啦、嘿嘿
以上代碼中實現(xiàn)了兩種流形式來完成寫入和讀入,這里我們?yōu)槭裁匆褂肈ata流來包裝,其實不光是獲得更多的操作方式,最主要的是方便快捷,你比如用file來讀入的時候,明顯的復(fù)雜了一些不說,它還一次性把所有數(shù)據(jù)都取出來了,不便于對數(shù)據(jù)的處理!
強(qiáng)調(diào)的有幾點:
1: 在一開始對數(shù)據(jù)的訪問再次提醒童鞋們,這個跟sharedPreference的獲取方式不一樣,sharedPreference 的獲取方式可以得到一個默認(rèn)的值,但是你用咱們獲取的是個文件 而且直接就去open這個文件,一旦不存在必定異常,所以這一塊的異常處理,以及finally的處理一定要處理得當(dāng)。
2.其實在一開始用data包裝的時候發(fā)現(xiàn)寫入的字符串在讀入的時候發(fā)現(xiàn)字符亂碼了,查了api才發(fā)現(xiàn),api規(guī)定當(dāng)寫入字符串的時候必須寫入UTF-8格式的編碼,但是后來不知道怎么了就沒事了。 - -、所以這里如果童鞋們遇到此問題,我給出大家一個解決方法,就是在寫入的時候我們不要去DataOutputStream 來包裝而是用,OutputStreamWriter ,因為在構(gòu)造的可以設(shè)定編碼!
OutputStreamWriter osw = new OutputStreamWriter(fis,"UTF-8");
Stringcontent = EncodingUtils.getString(buffer, "UTF-8" ); 這個也能把字符數(shù)組轉(zhuǎn)碼制!
這樣寫入的就肯定是UTF-8編碼的字符啦、
下面介紹如何把我們的數(shù)據(jù)通過 OutputStream/InputStream 存入SD卡中!
其實將我們的數(shù)據(jù)放入SD卡中,無疑就需要對代碼進(jìn)行兩處的修改:
注意:一定要有SD卡!對于如何創(chuàng)建SD卡在前一篇文章中已經(jīng)說了兩種方式,不會的童鞋可以去看下;
第一:檢查是否裝有SD卡;
第二: 修改讀入的地方 ( 備注1 )
fis = this.openFileInput("save.himi"); //這里沒有路徑,路徑是默認(rèn)的 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);這里也是默認(rèn)路徑,需要對其修改,
注意:這里修改了,那么在finally中的判定大家也要對應(yīng)的適當(dāng)修改;
注意:如果是系統(tǒng)路徑,當(dāng)沒有此文件的時候,android 會默認(rèn)創(chuàng)建一個!但是我們放入SD卡的時候要自己創(chuàng)建目錄路徑和文件!
第四: 因為我們要在SD卡中進(jìn)行寫入的操作,所以要在配置文件中聲明權(quán)限!
AndroidMainfest.xml
這一句就是啦~
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
為了讓大家看到所放的位置,所以把整個xml放出來供參考;
那么當(dāng)創(chuàng)建路徑和文件的時候,我們對其檢查SD卡中是否已經(jīng)存在exists()方法 ,如果已經(jīng)存在就不去創(chuàng)建,這樣避免下次再次寫入數(shù)據(jù)的時候又新建了文件和路徑、
其實我們在可以在啟動程序的時候判斷如果沒有此文件,我們可以直接緊接著創(chuàng)建一個文件,這些都屬于優(yōu)化上的了,我主要是讓大家引入,學(xué)會,那么其他的簡化啦,優(yōu)化啦,其他方式去實現(xiàn)啦都留給各位同學(xué)自己了、
OK、今天就先介紹到這里,后面會單獨剖析SQLite如何存入數(shù)據(jù),以及對數(shù)據(jù)操作的! 希望大家繼續(xù)關(guān)注!
(推薦大家訂閱本博客,因為咱的更新速度可是很快的~娃哈哈)
本篇源碼: http://download.csdn.net/source/2959100
新的一年了小明祝福大家新的一年里,事業(yè)順利,身體健康,全家幸福美滿!
上張本項目的截圖:
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
