真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android數(shù)據(jù)存儲方式,android數(shù)據(jù)存儲方式在什么位置

android 數(shù)據(jù)存儲的幾種方式

總體的來講,數(shù)據(jù)存儲方式有三種:一個是文件,一個是數(shù)據(jù)庫,另一個則是網(wǎng)絡(luò)。其中文件和數(shù)據(jù)庫可能用的稍多一些,文件用起來較為方便,程序可以自己定義格式;數(shù)據(jù)庫用起稍煩鎖一些,但它有它的優(yōu)點,比如在海量數(shù)據(jù)時性能優(yōu)越,有查詢功能,可以加密,可以加鎖,可以跨應(yīng)用,跨平臺等等;網(wǎng)絡(luò),則用于比較重要的事情,比如科研,勘探,航空等實時采集到的數(shù)據(jù)需要馬上通過網(wǎng)絡(luò)傳輸?shù)綌?shù)據(jù)處理中心進行存儲并進行處理。 對于Android平臺來講,它的存儲方式也不外乎這幾種,按方式總體來分,也是文件,數(shù)據(jù)庫和網(wǎng)絡(luò)。但從開發(fā)者的角度來講它可以分為以下五種方式: 1.SharedPreferences共享偏好 2.Internal Storage內(nèi)部存儲空間 3.External Storage外部存儲空間 4.SQLite Database數(shù)據(jù)庫 5.Internet網(wǎng)絡(luò) 這幾種方式各自有各自的優(yōu)點和缺點,要根據(jù)不同的實際情況來選擇,而無法給出統(tǒng)一的標準。下面就各種方式談?wù)勊鼈兊膬?yōu)缺點,以及最合適的使用情況: 1.Shared Preferences共享偏好 SharedPreferences是用來存儲一些Key/Value類似的成對的基本數(shù)據(jù)類型,注意,它只能存儲基本數(shù)據(jù)類型,也即int, long, boolean, String, float。事實上它完全相當(dāng)于一個HashMap,唯一不同的就是HashMap中的Value可以是任何對象,而SharedPreferences中的值只能存儲基本數(shù)據(jù)類型(primitive types)。 對于它的使用方法,可以參考Android Developer Guide,這里不重復(fù)。 如此來看,最適合SharedPreferences的地方就是保存配置信息,因為很多配置信息都是Key/Value。事實上,在Android當(dāng)中SharedPreferences使用最多的地方也是用來保存配置(Settings)信息,系統(tǒng)中的Settings中這樣,各個應(yīng)用中的Settings也是這樣。并且,Android中為了方便的使用SharedPreferences保存配置信息,它來專門有PreferenceActivity用來封裝。也就是說如果你想在應(yīng)用程序中創(chuàng)建配置(Settings),你可以直接使用PreferenceActivity和一些相關(guān)的專門為Preference封裝的組件,而不用再直接去創(chuàng)建,讀取和保存SharedPreference,F(xiàn)ramework中的這些組件會為你做這些事。 再談?wù)勔恍┦褂肧haredPreference時的技巧,它只能保存基本數(shù)據(jù)類型,但假如我想保存一個數(shù)組,怎么辦?可以把數(shù)據(jù)進行處理,把它轉(zhuǎn)化成一個String,取出的時候再還原就好了;再如,如想保存一個對象,怎么辦,同樣,可以把對象序列化成為字符序列,或轉(zhuǎn)成String(Object.toString()),或是把它的HashCode(Object.hashCode())當(dāng)成Value保存進去。 總之,SharedPreferences使用起來十分的方便,可以靈活應(yīng)用,因為它簡單方便,所以能用它就盡量不要用文件或是數(shù)據(jù)庫。 1.Internal Storage內(nèi)部存儲空間 所謂的內(nèi)部存儲與外部存儲,是指是否是手機內(nèi)置。手機內(nèi)置的存儲空間,稱為內(nèi)部存儲,它是手機一旦出廠就無法改變,它也是手機的硬件指標之一,通常來講手機內(nèi)置存儲空間越大意味著手機價格會越貴(很多地方把它稱為手機內(nèi)存,但我們做軟件的知道,這并不準確,內(nèi)存是指手機運行時存儲程序,數(shù)據(jù)和指令的地方;這里應(yīng)該是手機內(nèi)部存儲的簡稱為內(nèi)存,而并非嚴格意義上的內(nèi)存)。 內(nèi)部存儲空間十分有限,因而顯得可貴,所以我們要盡可能避免使用;另外,它也是系統(tǒng)本身和系統(tǒng)應(yīng)用程序主要的數(shù)據(jù)存儲所在地,一旦內(nèi)部存儲空間耗盡,手機也就無法使用了。所以對于內(nèi)部存儲空間,我們要盡量避免使用。上面所談到的Shared Preferences和下面要談到的SQLite數(shù)據(jù)庫也都是存儲在內(nèi)部存儲空間上的。 Android本身來講是一個Linux操作系統(tǒng),所以它的內(nèi)部存儲空間,對于應(yīng)用程序和用戶來講就是“/data/data"目錄。它與其他的(外部的存儲)相比有著比較穩(wěn)定,存儲方便,操作簡單,更加安全(因為可以控制訪問權(quán)限)等優(yōu)點。而它唯一的缺點就是它比較有限,比較可貴。 雖然,可以非常容易的知道程序本身的數(shù)據(jù)所在路徑,所有的應(yīng)用程序的數(shù)據(jù)路徑都是“/data/data/app-package-name/”,所有的程序用到的數(shù)據(jù),比如libs庫,SharedPreferences都是存放在這個路徑下面。但我們在使用的時候最好不要,或是千萬不要直接引用這個路徑。 使用內(nèi)部存儲主要有二個方式,一個是文件操作,一個是文件夾操作。無論哪種方式,Context中都提供了相應(yīng)的函數(shù)來支持,使用Context不但操作簡單方便,最重要的是Context會幫助我們管理這些文件,也可以方便幫助我們控制文件的訪問權(quán)限。先來系統(tǒng)的說下Context中關(guān)于文件和文件夾操作的函數(shù)有哪些。 a. 創(chuàng)建一個文件,并打開成一個文件輸出流,需要提供一個String,作為文件名 1.FileOutputStream output = Context.openOutputFile(filename, Context.MODE_PRIVATE); 2.output.write(data);// use output to write whatever you like 3.output.close(); 1.FileOutputStream output = Context.openOutputFile(filename, Context.MODE_PRIVATE); output.write(data);// use output to write whatever you like output.close(); b. 同樣,想打開一個文件作為輸入的話,也是只需要提供文件名 1.FileInputStream input = Context.openInputFile(filename); 2.input.read(); 3.input.close(); 1.FileInputStream input = Context.openInputFile(filename); input.read(); input.close(); c. 列出所有的已創(chuàng)建的文件 1.String[] files = Context.fileList(); 2.for (String file : files) { 3. Log.e(TAG, "file is " + file); 4.} 1.String[] files = Context.fileList(); for (String file : files) { Log.e(TAG, "file is " + file); } d. 刪除文件,能創(chuàng)建就要能夠刪除,當(dāng)然也會提供了刪除文件的接口,它也非常簡單,只需要提供文件名 1.if (Context.deleteFile(filename)) { 2. Log.e(TAG, "delete file " + filename + " sucessfully“); 3.} else { 4. Log.e(TAG, "failed to delete file " + filename); 5.} 1.if (Context.deleteFile(filename)) { Log.e(TAG, "delete file " + filename + " sucessfully“); } else { Log.e(TAG, "failed to delete file " + filename); } e. 獲取文件已創(chuàng)建文件的路徑,它返回一個文件對象用于操作路徑 1.File fileDir = Context.getFileDir(); 2.Log.e(TAG, "fileDir " + fileDir.getAbsolutePath(); 1.File fileDir = Context.getFileDir(); Log.e(TAG, "fileDir " + fileDir.getAbsolutePath(); f. 創(chuàng)建一個目錄,需要傳入目錄名稱,它返回 一個文件對象用到操作路徑 1.File workDir = Context.getDir(dirName, Context.MODE_PRIVATE); 2.Log.e(TAG, "workdir " + workDir.getAbsolutePath(); 1.File workDir = Context.getDir(dirName, Context.MODE_PRIVATE); Log.e(TAG, "workdir " + workDir.getAbsolutePath(); g. 以File對象方式查看所創(chuàng)建文件,需要傳入文件名,會返回文件對象 1.File store = Context.openFileStreamPath(filename); 2.Log.e(TAG, "store " + store.length()); 1.File store = Context.openFileStreamPath(filename); Log.e(TAG, "store " + store.length()); h. 獲取Cache路徑,無需要傳入?yún)?shù),返回文件對象 1.File cachedir = Context.getCacheDir(); 2.Log.e(TAG, "cachedir " + cacheDir.getAbsolutePath()); 1.File cachedir = Context.getCacheDir(); Log.e(TAG, "cachedir " + cacheDir.getAbsolutePath()); 總結(jié)一下文件相關(guān)操作,可以得出以下三個特點: 1. 文件操作只需要向函數(shù)提供文件名,所以程序自己只需要維護文件名即可; 2. 不用自己去創(chuàng)建文件對象和輸入、輸出流,提供文件名就可以返回File對象或輸入輸出流 3. 對于路徑操作返回的都是文件對象。 如前所述,內(nèi)部存儲空間有限,可貴,安全,穩(wěn)定,所以應(yīng)該用來保存比較重要的數(shù)據(jù),比如用戶信息資料,口令秘碼等不需要與其他應(yīng)用程序共享的數(shù)據(jù)。也可以用來創(chuàng)建臨時文件,但一定要注意及時刪除。另外,對于內(nèi)部存儲還有一個非常重要的特點,那就是在應(yīng)用程序被卸載時,應(yīng)用程序在內(nèi)部存儲空間的文件數(shù)據(jù)將全部被刪除。系統(tǒng)這樣做的原因很簡單,就是因為內(nèi)部存儲很有限,它必須保證它的可用性,因為一旦添滿,系統(tǒng)將無法再正常工作。 1.External Storage外部存儲空間 再來談?wù)勈謾C外部存儲空間,與內(nèi)部存儲空間相對,外部存儲空間是指手機出廠的時候不存在,用戶在使用時候可以自由添加的外部存儲介質(zhì)比如TS卡,SD卡等閃存儲介質(zhì)。這些閃存介質(zhì)由最初的空間小價格貴,到現(xiàn)在的大容量價格便宜,所以幾乎每個支持外部存儲的手機上面都有大容量(大于等于2G)的閃存卡。 Android也是不例外,它完全支持外部存儲介質(zhì)。其實更確切的說,它是要依賴于外部存儲卡的,因為對于Android系統(tǒng),如果沒有外部存儲卡,很多的系統(tǒng)應(yīng)用無法使用,比如多媒體相關(guān)的應(yīng)用程序無法使用。雖然Android很依賴,但是外部存儲卡也有它自身的特點,它最大的優(yōu)點就是存儲空間大,基本上你可無限制的使用,也不怎么擔(dān)心去清除數(shù)據(jù)。就目前來看,很多程序都在使用外部存儲卡,但很少有程序去主動清理數(shù)據(jù),所以無論你的SD卡有多大,它的可用空間卻越來越少。與內(nèi)部存儲不同的是,當(dāng)程序卸載時,它在外部存儲所創(chuàng)建的文件數(shù)據(jù)是不會被清除的。所以清理外部存儲空間的責(zé)任丟給了用戶自己,每隔一段時間就去查看下SD卡,發(fā)現(xiàn)無用數(shù)據(jù)立馬刪除。外部存儲的缺點就是不是很穩(wěn)定,對于Android手機來講可以說,很不穩(wěn)定,本身閃存介質(zhì)就容易出問題,SD卡處于不能正常使用的狀態(tài)十分多。 先來說說外部存儲相關(guān)的使用方法和API: a. Check media availability檢查介質(zhì)的可用性 如前所述,外部存儲介質(zhì)的穩(wěn)定性十分的差,所以在使用之前一定要先檢查它的可用性,如果可用再去用 view plaincopy to clipboardprint? 1.final String state = Environment.getExternalStorageState(); 2.if (state.equals(Environment.MEDIA_MOUNTED) || state.equals(Environment.MEDIA_READ_ONLY)) {// sd card is ready to us } view plaincopy to clipboardprint? 1.final String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED) || state.equals(Environment.MEDIA_READ_ONLY)) {// sd card is ready to us } final String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED) || state.equals(Environment.MEDIA_READ_ONLY)) {// sd card is ready to us } b. Get the directory獲取外部存儲卡的路徑 事實上,外部存儲卡的路徑是“/mnt/sdcard",所以你直接這樣寫去訪問也能訪問的到。鑒于可讀性和可移植性的考慮,建議這樣寫: view plaincopy to clipboardprint? 1.File sdcardDir = Environment.getExternalStorageDirectory(); view plaincopy to clipboardprint? 1.File sdcardDir = Environment.getExternalStorageDirectory(); File sdcardDir = Environment.getExternalStorageDirectory(); c. For API 8 or greater, there are some other useful APIs helping to manager files and directories. 如果你使用API 8(Android 2.2)或者更高,那么SDK中又多了幾個操作外部存儲文件和路徑的接口,文檔中也建議開始者更加規(guī)范的使用SD卡。比如,創(chuàng)建相應(yīng)的目錄去存儲相應(yīng)的數(shù)據(jù),Music,Picture,Video等。應(yīng)用程序目錄也變成了"/Android/data/package-name/data"。具體的使用可以參考文檔,這里不重復(fù)。當(dāng)然,就像編程規(guī)范一樣,這里只是規(guī)范,你完全可以不遵守它,但出于可讀性和可移植性,還是建議按照文檔建議的去做。 下面總結(jié)一下使用時應(yīng)該注意的一些和外部存儲的特點: a. 外部存儲卡不是隨時想用就能夠用的,所以一定要記得在使用之前檢查它的可用性 b. 存儲在外部存儲卡上的數(shù)據(jù)是所有應(yīng)用程序都可見,用戶也可見(使用FileManager),所以安全性不是很好,雖然文檔聲稱可以在外部存儲卡上寫程序私有數(shù)據(jù),但貌似沒用,用FileManager仍然可以刪除或編輯文件(Market上面的FileManager功能都十分的強大,能讓用戶看到SD卡中的所有文件,和操作能看到的文件)。 c. Android手機支持把外部存儲卡Mount至PC做為U盤,當(dāng)連接數(shù)據(jù)線時,這時SD卡變成了U盤連接到了另外的操作系統(tǒng)中。什么意思,就是在Android當(dāng)中雖然有的文件屬性(隱藏,私有等),到了PC上就不一定管用了,用戶在PC上可以隨意操作文件(這就是第二點中所提及的)。 d. 如果使用外部存儲卡保存數(shù)據(jù),一定要額外做好異常處理:外部存儲卡不可用時把數(shù)據(jù)存入哪里;可用的時候再怎么同步數(shù)據(jù)(這是比較頭疼的地方,可行的做法就是當(dāng)SD卡不可用時不準用戶寫數(shù)據(jù),但這用戶體驗又不是很好,但如你所知,很多應(yīng)用都這么干);你的數(shù)據(jù)被破壞了。當(dāng)然常見的異常也要考慮,比如空間滿了,無法寫入,磁盤壞道等。 1.SQLite Database數(shù)據(jù)庫 Android對數(shù)據(jù)庫的支持很好,它本身集成了SQLite數(shù)據(jù)庫,每個應(yīng)用都可以方便的使用它,或者更確切的說,Android完全依賴于SQLite數(shù)據(jù)庫,它所有的系統(tǒng)數(shù)據(jù)和用到的結(jié)構(gòu)化數(shù)據(jù)都存儲在數(shù)據(jù)庫中。 它具有以下優(yōu)點: a. 效率出眾,這是無可否認的 b. 十分適合存儲結(jié)構(gòu)化數(shù)據(jù) c. 方便在不同的Activity,甚至不同的應(yīng)用之間傳遞數(shù)據(jù) 先前有一篇文章講到了不同Activity和不同應(yīng)用之間傳遞數(shù)據(jù)的麻煩,特別是對于大型數(shù)據(jù)結(jié)構(gòu),因為Activity雖是Java對象,但去無法像使用其他類對象那樣去創(chuàng)建一個實例然后使用它,更無法給Activity加上Setters和Getters(雖然這樣做了沒有編譯錯誤)。比較好的解決方案就是把結(jié)構(gòu)化數(shù)據(jù)寫入數(shù)據(jù)庫,然后在不同的Activity之間傳遞它們的Uri。 d. 由專門的ContentProvider來幫忙管理和維護數(shù)據(jù)庫 e. 可以方便的設(shè)置訪問權(quán)限,私有還是都可見 f. 操作方便,使用標準的CRUDE語句,ContentResolver.query(), update(), delete() insert(),詳見ContentResolver g. 良好的可移植性和通用性,用標準的SQL語句就能實現(xiàn)CRUDE 對于它的使用方法可以去參考文檔,這里也說不清楚。 1.Internet網(wǎng)絡(luò) 網(wǎng)絡(luò)是比較不靠譜的一個,因為移動終端的網(wǎng)絡(luò)穩(wěn)定性,以及所產(chǎn)生的流量讓人傷不起,用戶更傷不起。但若是對于非常重要的實時數(shù)據(jù),或是需要發(fā)送給遠端服務(wù)器處理的,也可以考慮使用網(wǎng)絡(luò)實時發(fā)送。這已經(jīng)有先例了,Apple和Google就是這樣,iPhone設(shè)備和Android設(shè)備都會在用戶不知情的情況 下收集用戶的信息,然后又在用戶不知情的情況 下發(fā)送到Apple和Google的服務(wù)器上,也就是所謂的“跟蹤門”。除此之外,智能手機(特別是Android和火熱的iPhone)上面的應(yīng)用程序都會偷偷的在后臺運行,收集用戶數(shù)據(jù),然后再偷偷的發(fā)服務(wù)器,直接傷害是用戶流量,請看先前的文章。 對比這幾種方式,可以總結(jié)下: 1. 簡單數(shù)據(jù)和配置信息,SharedPreference是首選; 2. 如果SharedPreferences不夠用,那么就創(chuàng)建一個數(shù)據(jù)庫 3. 結(jié)構(gòu)化數(shù)據(jù),一定要創(chuàng)建數(shù)據(jù)庫,雖然這稍顯煩鎖,但是好處無窮 4. 文件就是用來存儲文件(也即非配置信息或結(jié)構(gòu)化數(shù)據(jù)),如文本文件,二進制文件,PC文件,多媒體文件,下載的文件等等。 5. 盡量不要創(chuàng)建文件 6. 如果創(chuàng)建文件,如果是私密文件或是重要文件,就存儲在內(nèi)部存儲,否則放到外部存儲 7. 不要收集用戶數(shù)據(jù),更不要發(fā)到網(wǎng)絡(luò)上,雖然你們也有很多無奈。用戶也無奈,也無辜,但更無助 平臺為開發(fā)者準備了這么多的方式固然是一件好事,但我們要認清每一種的優(yōu)點和缺點,根據(jù)實際情況選擇最合適的。還有一個原則就是最簡單原則,也就是說能用簡單的方式處理,就不要用復(fù)雜的方式。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的雞西梨樹網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

android開發(fā)怎么存儲數(shù)據(jù)

Android平臺開發(fā)過程中,進行數(shù)據(jù)存儲的方式有五種,一下是這五種數(shù)據(jù)存儲的總結(jié):

第一種:?使用SharedPreferences存儲數(shù)據(jù)

適用范圍:保存少量的數(shù)據(jù),且這些數(shù)據(jù)的格式非常簡單:字符串型、基本類型的值。比如應(yīng)用程序的各種配置信息(如是否打開音效、是否使用震動效果、小游戲的玩家積分等),解鎖口 令密碼等

核心原理:保存基于XML文件存儲的key-value鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。通過DDMS的File Explorer面板,展開文件瀏覽樹,很明顯SharedPreferences數(shù)據(jù)總是存儲在/data/data/package name/shared_prefs目錄下。SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過SharedPreferences.edit()獲取的內(nèi)部接口Editor對象實現(xiàn)。?SharedPreferences本身是一 個接口,程序無法直接創(chuàng)建SharedPreferences實例,只能通過Context提供的getSharedPreferences(String name, int mode)方法來獲取SharedPreferences實例,該方法中name表示要操作的xml文件名,第二個參數(shù)具體如下:

Context.MODE_PRIVATE: 指定該SharedPreferences數(shù)據(jù)只能被本應(yīng)用程序讀、寫。

Context.MODE_WORLD_READABLE:??指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀,但不能寫。

Context.MODE_WORLD_WRITEABLE:??指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀,寫

Editor有如下主要重要方法:

SharedPreferences.Editor clear():清空SharedPreferences里所有數(shù)據(jù)

SharedPreferences.Editor putXxx(String key , xxx value):?向SharedPreferences存入指定key對應(yīng)的數(shù)據(jù),其中xxx 可以是boolean,float,int等各種基本類型據(jù)

SharedPreferences.Editor remove():?刪除SharedPreferences中指定key對應(yīng)的數(shù)據(jù)項

boolean commit():?當(dāng)Editor編輯完成后,使用該方法提交修改

實際案例:運行界面如下

這里只提供了兩個按鈕和一個輸入文本框,布局簡單,故在此不給出界面布局文件了,程序核心代碼如下:

讀寫其他應(yīng)用的SharedPreferences: 步驟如下

1、在創(chuàng)建SharedPreferences時,指定MODE_WORLD_READABLE模式,表明該SharedPreferences數(shù)據(jù)可以被其他程序讀取

2、創(chuàng)建其他應(yīng)用程序?qū)?yīng)的Context:

Context pvCount = createPackageContext("com.tony.app", Context.CONTEXT_IGNORE_SECURITY);這里的com.tony.app就是其他程序的包名

3、使用其他程序的Context獲取對應(yīng)的SharedPreferences

SharedPreferences read = pvCount.getSharedPreferences("lock", Context.MODE_WORLD_READABLE);

4、如果是寫入數(shù)據(jù),使用Editor接口即可,所有其他操作均和前面一致。

SharedPreferences對象與SQLite數(shù)據(jù)庫相比,免去了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數(shù)據(jù)類型,比如其無法進行條件查詢等。所以不論SharedPreferences的數(shù)據(jù)存儲操作是如何簡單,它也只能是存儲方式的一種補充,而無法完全替代如SQLite數(shù)據(jù)庫這樣的其他數(shù)據(jù)存儲方式。

第二種: 文件存儲數(shù)據(jù)

核心原理: Context提供了兩個方法來打開數(shù)據(jù)文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),這兩個方法第一個參數(shù) 用于指定文件名,第二個參數(shù)指定打開文件的模式。具體有以下值可選:

MODE_PRIVATE:為默認操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容,如果想把新寫入的內(nèi)容追加到原文件中???? 以使用Context.MODE_APPEND

MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。

MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀取;

MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入。

除此之外,Context還提供了如下幾個重要的方法:

getDir(String name , int mode):在應(yīng)用程序的數(shù)據(jù)文件夾下獲取或者創(chuàng)建name對應(yīng)的子目錄

File getFilesDir():獲取該應(yīng)用程序的數(shù)據(jù)文件夾得絕對路徑

String[] fileList():返回該應(yīng)用數(shù)據(jù)文件夾的全部文件? ? ? ? ? ? ?

實際案例:界面沿用上圖

核心代碼如下:

openFileOutput()方法的第一參數(shù)用于指定文件名稱,不能包含路徑分隔符“/” ,如果文件不存在,Android 會自動創(chuàng)建它。創(chuàng)建的文件保存在/data/data/package name/files目錄,如: /data/data/cn.tony.app/files/message.txt,

下面講解某些特殊文件讀寫需要注意的地方:

讀寫sdcard上的文件

其中讀寫步驟按如下進行:

1、調(diào)用Environment的getExternalStorageState()方法判斷手機上是否插了sd卡,且應(yīng)用程序具有讀寫SD卡的權(quán)限,如下代碼將返回true

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

2、調(diào)用Environment.getExternalStorageDirectory()方法來獲取外部存儲器,也就是SD卡的目錄,或者使用"/mnt/sdcard/"目錄

3、使用IO流操作SD卡上的文件

注意點:手機應(yīng)該已插入SD卡,對于模擬器而言,可通過mksdcard命令來創(chuàng)建虛擬存儲卡

必須在AndroidManifest.xml上配置讀寫SD卡的權(quán)限

uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/

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

案例代碼:

第三種:SQLite存儲數(shù)據(jù)

SQLite是輕量級嵌入式數(shù)據(jù)庫引擎,它支持 SQL 語言,并且只利用很少的內(nèi)存就有很好的性能。現(xiàn)在的主流移動設(shè)備像Android、iPhone等都使用SQLite作為復(fù)雜數(shù)據(jù)的存儲引擎,在我們?yōu)橐苿釉O(shè)備開發(fā)應(yīng)用程序時,也許就要使用到SQLite來存儲我們大量的數(shù)據(jù),所以我們就需要掌握移動設(shè)備上的SQLite開發(fā)技巧

SQLiteDatabase類為我們提供了很多種方法,上面的代碼中基本上囊括了大部分的數(shù)據(jù)庫操作;對于添加、更新和刪除來說,我們都可以使用

以上三個方法的第一個參數(shù)都是表示要操作的表名;insert中的第二個參數(shù)表示如果插入的數(shù)據(jù)每一列都為空的話,需要指定此行中某一列的名稱,系統(tǒng)將此列設(shè)置為NULL,不至于出現(xiàn)錯誤;insert中的第三個參數(shù)是ContentValues類型的變量,是鍵值對組成的Map,key代表列名,value代表該列要插入的值;update的第二個參數(shù)也很類似,只不過它是更新該字段key為最新的value值,第三個參數(shù)whereClause表示W(wǎng)HERE表達式,比如“age ? and age ?”等,最后的whereArgs參數(shù)是占位符的實際參數(shù)值;delete方法的參數(shù)也是一樣

下面給出demo

數(shù)據(jù)的添加

1.使用insert方法

在上面的代碼示例中,已經(jīng)用到了這幾個常用方法中的一些,關(guān)于更多的信息,大家可以參考官方文檔中的說明。

最后當(dāng)我們完成了對數(shù)據(jù)庫的操作后,記得調(diào)用SQLiteDatabase的close()方法釋放數(shù)據(jù)庫連接,否則容易出現(xiàn)SQLiteException。

上面就是SQLite的基本應(yīng)用,但在實際開發(fā)中,為了能夠更好的管理和維護數(shù)據(jù)庫,我們會封裝一個繼承自SQLiteOpenHelper類的數(shù)據(jù)庫操作類,然后以這個類為基礎(chǔ),再封裝我們的業(yè)務(wù)邏輯方法。

這里直接使用案例講解:下面是案例demo的界面

Android sqlite3數(shù)據(jù)庫管理工具

Android SDK的tools目錄下提供了一個sqlite3.exe工具,這是一個簡單的sqlite數(shù)據(jù)庫管理工具。開發(fā)者可以方便的使用其對sqlite數(shù)據(jù)庫進行命令行的操作。

程序運行生成的*.db文件一般位于"/data/data/項目名(包括所處包名)/databases/*.db",因此要對數(shù)據(jù)庫文件進行操作需要先找到數(shù)據(jù)庫文件:

1、進入shell 命令

adb shell

2、找到數(shù)據(jù)庫文件

#cd data/data

#ls ? ? ? ? ? ? ? ?--列出所有項目

#cd project_name ? --進入所需項目名

#cd databases ? ?

#ls ? ? ? ? ? ? ? ?--列出現(xiàn)寸的數(shù)據(jù)庫文件

3、進入數(shù)據(jù)庫

#sqlite3 test_db ? --進入所需數(shù)據(jù)庫

會出現(xiàn)類似如下字樣:

SQLite version 3.6.22

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite

至此,可對數(shù)據(jù)庫進行sql操作。

4、sqlite常用命令

.databases ? ? ? ?--產(chǎn)看當(dāng)前數(shù)據(jù)庫

.tables ? ? ? ? ? --查看當(dāng)前數(shù)據(jù)庫中的表

.help ? ? ? ? ? ? --sqlite3幫助

.schema ? ? ? ? ? ?--各個表的生成語句

以上便是android開發(fā)存儲數(shù)據(jù)的五種方法!

云南北大青鳥java培訓(xùn)告訴你Android軟件開發(fā)主要是學(xué)習(xí)什么的?

近半年來,手機的安卓系統(tǒng)與ios系統(tǒng)是目前主流的手機系統(tǒng),Android軟件開發(fā)主要是學(xué)習(xí)什么的?IT培訓(xùn)發(fā)現(xiàn)安卓開發(fā)的技術(shù)很多的,如果想一次性學(xué)好是不實際的,但下面這些基礎(chǔ)還是要學(xué)好的。

1、Activity生命周期

雖然Android中有四大組件,但是不可否認Activity是最常用的。所以熟練掌握Android的生命周期是必須的。其實生命周期就是記住Activity的那些方法在什么時候被系統(tǒng)調(diào)用,這樣才可以把對應(yīng)的邏輯代碼寫到合適的方法內(nèi)部去。

至于服務(wù)和廣播組件可以稍微緩一下,到實際使用的時候再學(xué)習(xí)都可以。

2、界面開發(fā)技術(shù)

界面開發(fā)是一種基本的技術(shù),幾乎所有的程序里面都需要用到。在Android開發(fā)中界面開發(fā)分為3種:

1)使用xml文件布局

使用xml首先對于界面進行布局,然后在Activity里面進行引用是最常見的應(yīng)用軟件開發(fā)技術(shù),這種方式使用的最大,需要學(xué)習(xí)的內(nèi)容也最多。學(xué)習(xí)時需要熟悉:

a)五種Layout布局

深刻理解五種布局組織控件的方式是一個基本的基礎(chǔ),這樣你才可以在實際的界面中靈活的使用每種布局結(jié)構(gòu),構(gòu)造出需要的界面。

b)常用控件

控件有很多,至少要知道每種控件是做什么的,至于里面的特定參數(shù)和方法可以學(xué)要的時候再去查

c)界面美化

系統(tǒng)的控件很多時候無法滿足要求,需要通過添加背景更換圖片等進行美化,要熟悉每種控件如何去美化。

掌握了上面的內(nèi)容,通過布局的嵌套就可以制作出各種界面,如果在熟悉include的使用就可以減少xml的重復(fù),方便后期的修改和維護了。

2)使用代碼動態(tài)創(chuàng)建

有些時候需要動態(tài)的創(chuàng)建一些布局和控件,這個就需要使用LayoutInflater去創(chuàng)建一些動態(tài)的界面了。

3)自己繪制界面

游戲中常用,繼承SurfaceView自己繪制。

3、數(shù)據(jù)存儲技術(shù)

Android中的數(shù)據(jù)存儲方式有3種:

1)SharedPrefereneces存儲

對于簡單的數(shù)據(jù)可以使用該方式存儲,以鍵值對的方式存儲一些基本的數(shù)據(jù)。

2)文件存儲

將數(shù)據(jù)以文件的形式存儲,可以是手機自身的存儲也可以是SD卡,文件的數(shù)據(jù)格式自己定義。

3)SQLite數(shù)據(jù)庫存儲

使用標準SQL語句進行操作,復(fù)雜數(shù)據(jù)的首選。

4、網(wǎng)絡(luò)編程

現(xiàn)在的Android程序不需要聯(lián)網(wǎng)的已經(jīng)不多了。所以網(wǎng)絡(luò)編程也是必須的,一般的公司都會封裝有自己的聯(lián)網(wǎng)結(jié)構(gòu),但是基本的聯(lián)網(wǎng)還是要熟悉。

1)HTTP聯(lián)網(wǎng)

使用Http聯(lián)網(wǎng)+Json數(shù)據(jù)格式是現(xiàn)在很多客戶端的首選。

2)Socket聯(lián)網(wǎng)

至于藍牙等連接方式則可以在項目需要的時候?qū)W習(xí)。

對于手機的系統(tǒng)功能,如撥打電話、發(fā)送短信、讀取系統(tǒng)參數(shù)等則可以根據(jù)需要在學(xué)習(xí),不麻煩的。

其次,手機軟件相關(guān)

Android開發(fā)不同于普通的電腦軟件開發(fā),需要了解手機的操作習(xí)慣,知道手機的屏幕不大、內(nèi)存有限,電池有限等,在實際開發(fā)和設(shè)計時盡量考慮。

簡述android平臺提供了哪些數(shù)據(jù)存儲方法

數(shù)據(jù)存儲在開發(fā)中是使用最頻繁的,Android平臺主要有5種實現(xiàn)數(shù)據(jù)存儲的方式。

第1種: 使用SharedPreferences存儲數(shù)據(jù)

SharedPreferences是Android平臺上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態(tài),一般在Activity中 重載窗口狀態(tài)onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平臺常規(guī)的Long長 整形、Int整形、String字符串型的保存。

它的本質(zhì)是基于XML文件存儲key-value鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。

其存儲位置在/data/data/包名/shared_prefs目錄下。

SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過Editor對象實現(xiàn)。

實現(xiàn)SharedPreferences存儲的步驟如下:

一、根據(jù)Context獲取SharedPreferences對象

二、利用edit()方法獲取Editor對象。

三、通過Editor對象存儲key-value鍵值對數(shù)據(jù)。

四、通過commit()方法提交數(shù)據(jù)。

SharedPreferences對象與SQLite數(shù)據(jù)庫相比,免去了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數(shù)據(jù)類型,比如其無法進行條件查詢等。所以不論SharedPreferences的數(shù)據(jù)存儲操作是如何簡單,它也只能是存儲方式的一種補充,而無法完全替代如SQLite數(shù)據(jù)庫這樣的其他數(shù)據(jù)存儲方式。

第2種: 內(nèi)部文件存儲數(shù)據(jù)

關(guān)于文件存儲,Activity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中,具體的實現(xiàn)過程與在J2SE環(huán)境中保存數(shù)據(jù)到文件中是一樣的。

文件可用來存放大量數(shù)據(jù),如文本、圖片、音頻等。

默認位置:/data/data/包/files/***.***。

openFileOutput()方法的第一參數(shù)用于指定文件名稱,不能包含路徑分隔符“/” ,如果文件不存在,Android 會自動創(chuàng)建它。

創(chuàng)建的文件保存在/data/data//files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,通過點擊Eclipse菜單“Window”-“Show View”-“Other”,在對話窗口中展開android文件夾,選擇下面的File Explorer視圖,然后在File Explorer視圖中展開/data/data//files目錄就可以看到該文件。

openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式,分別為:

Context.MODE_PRIVATE = 0

Context.MODE_APPEND = 32768

Context.MODE_WORLD_READABLE = 1

Context.MODE_WORLD_WRITEABLE = 2

Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容,如果想把新寫入的內(nèi)容追加到原文件中。可以使用Context.MODE_APPEND

Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應(yīng)用是否有權(quán)限讀寫該文件。

MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀??;

MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入。

如果希望文件被其他應(yīng)用讀和寫,可以傳入: openFileOutput(“itcast.txt”, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當(dāng)應(yīng)用程序(.apk)在安裝時系統(tǒng)就會分配給他一個userid,當(dāng)該應(yīng)用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應(yīng)用創(chuàng)建的文件,sharedpreferences,數(shù)據(jù)庫都應(yīng)該是私有的(位于/data/data//files),其他程序無法訪問。

除非在創(chuàng)建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。 對于私有文件只能被創(chuàng)建該文件的應(yīng)用訪問,如果希望文件能被其他應(yīng)用讀和寫,可以在創(chuàng)建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。

Activity還提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用于獲取/data/data//cache目錄 getFilesDir()方法用于獲取/data/data//files目錄。

第3種: 外部文件存儲數(shù)據(jù)

把文件存入SDCard:

使用Activity的openFileOutput()方法保存文件,文件是存放在手機空間上,一般手機的存儲空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。對于像視頻這樣的大文件,我們可以把它存放在SDCard。

SDCard是干什么的?你可以把它看作是移動硬盤或U盤。 在模擬器中使用SDCard,你需要先創(chuàng)建一張SDCard卡(當(dāng)然不是真的SDCard,只是鏡像文件)。

創(chuàng)建SDCard可以在Eclipse創(chuàng)建模擬器時隨同創(chuàng)建,也可以使用DOS命令進行創(chuàng)建,如下: 在Dos窗口中進入android SDK安裝路徑的tools目錄,輸入以下命令創(chuàng)建一張容量為2G的SDCard,文件后綴可以隨便取,建議使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中訪問SDCard,你需要申請訪問SDCard的權(quán)限。

在AndroidManifest.xml中加入訪問SDCard的權(quán)限如下:

要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard,并且可以進行讀寫。

注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的權(quán)限。

Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài),如果手機裝有SDCard,并且可以進行讀寫,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED。

Environment.getExternalStorageDirectory()方法用于獲取SDCard的目錄,當(dāng)然要獲取SDCard的目錄,你也可以這樣寫:

第4種: SQLite數(shù)據(jù)庫存儲數(shù)據(jù)

SQLite是輕量級嵌入式數(shù)據(jù)庫引擎,它支持 SQL 語言,并且只利用很少的內(nèi)存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下幾個組件組成:SQL 編譯器、內(nèi)核、后端以及附件。SQLite 通過利用虛擬機和虛擬數(shù)據(jù)庫引擎(VDBE),使調(diào)試、修改和擴展 SQLite 的內(nèi)核變得更加方便。

特點:

面向資源有限的設(shè)備,

沒有服務(wù)器進程,

所有數(shù)據(jù)存放在同一文件中跨平臺,

可自由復(fù)制。

SQLite 基本上符合 SQL-92 標準,和其他的主要 SQL 數(shù)據(jù)庫沒什么區(qū)別。它的優(yōu)點就是高效,Android 運行時環(huán)境包含了完整的 SQLite。

SQLite 和其他數(shù)據(jù)庫最大的不同就是對數(shù)據(jù)類型的支持,創(chuàng)建一個表時,可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中。當(dāng)某個值插入數(shù)據(jù)庫時,SQLite 將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則 SQLite 會嘗試將該值轉(zhuǎn)換成該列的類型。如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲。比如可以把一個字符串(String)放入 INTEGER 列。SQLite 稱這為“弱類型”(manifest typing.)。 此外,SQLite 不支持一些標準的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個完整的 SQL 系統(tǒng),擁有完整的觸發(fā)器,交易等等。

Android 集成了 SQLite 數(shù)據(jù)庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應(yīng)用程序都可以使用 SQLite 數(shù)據(jù)庫。

對于熟悉 SQL 的開發(fā)人員來時,在 Android 開發(fā)中使用 SQLite 相當(dāng)簡單。但是,由于 JDBC 會消耗太多的系統(tǒng)資源,所以 JDBC 對于手機這種內(nèi)存受限設(shè)備來說并不合適。因此,Android 提供了一些新的 API 來使用 SQLite 數(shù)據(jù)庫,Android 開發(fā)中,程序員需要學(xué)使用這些 API。

數(shù)據(jù)庫存儲在 data/ 項目文件夾 /databases/ 下。 Android 開發(fā)中使用 SQLite 數(shù)據(jù)庫 Activites 可以通過 Content Provider 或者 Service 訪問一個數(shù)據(jù)庫。

創(chuàng)建數(shù)據(jù)庫 Android 不自動提供數(shù)據(jù)庫。在 Android 應(yīng)用程序中使用 SQLite,必須自己創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,填充數(shù)據(jù)。

Android 提供了 SQLiteOpenHelper 幫助你創(chuàng)建一個數(shù)據(jù)庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper 類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。

SQLiteOpenHelper 的子類,至少需要實現(xiàn)三個方法:

1 構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)。這個方法需要四個參數(shù):上下文環(huán)境(例如,一個 Activity),數(shù)據(jù)庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的數(shù)據(jù)庫模型版本的整數(shù)。

2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數(shù),根據(jù)需要對這個對象填充表和初始化數(shù)據(jù)。

3 onUpgrage() 方法,它需要三個參數(shù),一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個數(shù)據(jù)庫從舊的模型轉(zhuǎn)變到新的模型。

接下來討論具體如何創(chuàng)建表、插入數(shù)據(jù)、刪除表等等。調(diào)用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 實例,具體調(diào)用那個方法,取決于你是否需要改變數(shù)據(jù)庫的內(nèi)容:

update()方法有四個參數(shù),分別是表名,表示列名和值的 ContentValues 對象,可選的 WHERE 條件和可選的填充 WHERE 語句的字符串,這些字符串會替換 WHERE 條件中的“?”標記。

update() 根據(jù)條件,更新指定列的值,所以用 execSQL() 方法可以達到同樣的目的。 WHERE 條件和其參數(shù)和用過的其他 SQL APIs 類似。

delete() 方法的使用和 update() 類似,使用表名,可選的 WHERE 條件和相應(yīng)的填充 WHERE 條件的字符串。 查詢數(shù)據(jù)庫 類似 INSERT, UPDATE, DELETE,有兩種方法使用 SELECT 從 SQLite 數(shù)據(jù)庫檢索數(shù)據(jù)。

1 .使用 rawQuery() 直接調(diào)用 SELECT 語句; 使用 query() 方法構(gòu)建一個查詢。

Raw Queries 正如 API 名字,rawQuery() 是最簡單的解決方法。通過這個方法你就可以調(diào)用 SQL SELECT 語句。

例如: Cursor c=db.rawQuery( “SELECT name FROM sqlite_master WHERE type=’table’ AND name=’mytable’”, null);

在上面例子中,我們查詢 SQLite 系統(tǒng)表(sqlite_master)檢查 table 表是否存在。返回值是一個 cursor 對象,這個對象的方法可以迭代查詢結(jié)果。 如果查詢是動態(tài)的,使用這個方法就會非常復(fù)雜。

例如,當(dāng)你需要查詢的列在程序編譯的時候不能確定,這時候使用 query() 方法會方便很多。

Regular Queries query() 方法用 SELECT 語句段構(gòu)建查詢。SELECT 語句內(nèi)容作為 query() 方法的參數(shù),比如:要查詢的表名,要獲取的字段名,WHERE 條件,包含可選的位置參數(shù),去替代 WHERE 條件中位置參數(shù)的值,GROUP BY 條件,HAVING 條件。 除了表名,其他參數(shù)可以是 null。所以,以前的代碼段可以可寫成:

String[] columns={“ID”, ”inventory”};

Java代碼

String[] parms={"snicklefritz"}; Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);

使用游標

不管你如何執(zhí)行查詢,都會返回一個 Cursor,這是 Android 的 SQLite 數(shù)據(jù)庫游標,

使用游標,你可以:

通過使用 getCount() 方法得到結(jié)果集中有多少記錄;

通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷所有記錄;

通過 getColumnNames() 得到字段名;

通過 getColumnIndex() 轉(zhuǎn)換成字段號;

通過 getString(),getInt() 等方法得到給定字段當(dāng)前記錄的值;

通過 requery() 方法重新執(zhí)行查詢得到游標;

通過 close() 方法釋放游標資源;

在 Android 中使用 SQLite 數(shù)據(jù)庫管理工具 在其他數(shù)據(jù)庫上作開發(fā),一般都使用工具來檢查和處理數(shù)據(jù)庫的內(nèi)容,而不是僅僅使用數(shù)據(jù)庫的 API。

使用 Android 模擬器,有兩種可供選擇的方法來管理數(shù)據(jù)庫。

首先,模擬器綁定了 sqlite3 控制臺程序,可以使用 adb shell 命令來調(diào)用他。只要你進入了模擬器的 shell,在數(shù)據(jù)庫的路徑執(zhí)行 sqlite3 命令就可以了。

數(shù)據(jù)庫文件一般存放在: /data/data/your.app.package/databases/your-db-name 如果你喜歡使用更友好的工具,你可以把數(shù)據(jù)庫拷貝到你的開發(fā)機上,使用 SQLite-aware 客戶端來操作它。這樣的話,你在一個數(shù)據(jù)庫的拷貝上操作,如果你想要你的修改能反映到設(shè)備上,你需要把數(shù)據(jù)庫備份回去。

把數(shù)據(jù)庫從設(shè)備上考出來,你可以使用 adb pull 命令(或者在 IDE 上做相應(yīng)操作)。

存儲一個修改過的數(shù)據(jù)庫到設(shè)備上,使用 adb push 命令。 一個最方便的 SQLite 客戶端是 FireFox SQLite Manager 擴展,它可以跨所有平臺使用。

如果你想要開發(fā) Android 應(yīng)用程序,一定需要在 Android 上存儲數(shù)據(jù),使用 SQLite 數(shù)據(jù)庫是一種非常好的選擇。

第五種: 網(wǎng)絡(luò)存儲數(shù)據(jù)

前面介紹的幾種存儲都是將數(shù)據(jù)存儲在本地設(shè)備上,除此之外,還有一種存儲(獲取)數(shù)據(jù)的方式,通過網(wǎng)絡(luò)來實現(xiàn)數(shù)據(jù)的存儲和獲取。

我們可以調(diào)用WebService返回的數(shù)據(jù)或是解析HTTP協(xié)議實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)交互。


本文名稱:android數(shù)據(jù)存儲方式,android數(shù)據(jù)存儲方式在什么位置
文章位置:http://weahome.cn/article/dscodjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部