日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

【Android游戲開(kāi)發(fā)十二】(保存游戲數(shù)據(jù) [上文]

系統(tǒng) 2165 0


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)目的截圖:

【Android游戲開(kāi)發(fā)十二】(保存游戲數(shù)據(jù) [上文])詳解SharedPreference 與 FIleInputStream/FileOutputStream將數(shù)據(jù)存儲(chǔ)到SD卡中!


【Android游戲開(kāi)發(fā)十二】(保存游戲數(shù)據(jù) [上文])詳解SharedPreference 與 FIleInputStream/FileOutputStream將數(shù)據(jù)存儲(chǔ)到SD卡中!


更多文章、技術(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ì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 如皋市| 苏州市| 肥乡县| 兴宁市| 迁西县| 霍城县| 岗巴县| 浪卡子县| 勐海县| 西峡县| 唐海县| 西平县| 阿拉尔市| 图木舒克市| 左贡县| 陆川县| 沾益县| 江安县| 陆良县| 遂川县| 社旗县| 阿拉善左旗| 镇坪县| 芜湖县| 十堰市| 宁海县| 霍林郭勒市| 祁连县| 衡南县| 平利县| 岳池县| 商洛市| 高密市| 灵丘县| 宣化县| 壤塘县| 汉川市| 个旧市| 长葛市| 广南县| 株洲县|