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

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