Android基本之SharedPreferences和File


概覽Storage quickview
 
²  系統偏好:快速,輕量級存儲
 
²  文件:存儲到設備內部或可移動閃存
 
²  數據庫:任意的結構化存儲
 
²  支持基於網絡的存儲
 
一個典型的桌面操作系統提供了一個通用文件系統使得任何應用程序能夠使用它來存儲文件,這些文件可以被其它應用程序讀取(可能有訪問權限的設置)。Android使用一個不同的系統:在Android上,所有應用程序數據(包括文件)都是該應用程序私有的。
 
不過,Android同樣提供了一個應用程序向其它應用程序暴露其私有數據的基本方式-通過內容提供器。內容提供器是應用程序的可選組件,用來暴露該應用程序數據的讀寫接口,且遵循任何可能引入的約定。內容提供器實現了一個用來請求和修改數據的基本語法,一個讀取返回數據的基本機制。Android爲基礎數據類型如圖像,音頻和視頻文件以及個人聯繫人信息提供了許多內容提供器。想要了解更多如何使用內容提供器的信息,請參見一篇單獨的文章:內容提供器(Content Providers)。

無論你是否想把應用程序數據輸出給別人,你總需要有一個方法來保存它。Android提供了下面4種機制來保存和獲取數據:系統偏好Preferences,文件Files,數據庫Databases和網絡Network。
 

系統偏好Preferences
 
系統偏好是一個用來存放和提取元數據類型鍵-值對的輕量級機制。它通常用來存放應用程序偏好,例如一個應用程序啓動時所使用的默認問候或文本字體。通過調用Context.getSharedPreferences() 來讀寫數值。如果你想分享給應用程序中的其它組件,可以爲你的偏好集分配一個名字,或者使用沒有名字的Activity.getPreferences()方法來保持對於該調用程序的私有性。你不能跨應用程序共享偏好(除了使用一個內容提供器)。
 
下面是一個爲計算器設置按鍵靜音模式的例子:
 

import android.app.Activity;
 
import android.content.SharedPreferences;
 
 
 
public class Calc extends Activity {
 
public static final String PREFS_NAME = "MyPrefsFile";
 
    . . .     

    @Override
 
    protected void onCreate(Bundle state){        

       super.onCreate(state);
 
   

    . . .
 
   

       // Restore preferences
 
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
 
       boolean silent = settings.getBoolean("silentMode", false);
 
       setSilent(silent);
 
    }
 
   

    @Override
 
    protected void onStop(){
 
       super.onStop();
 
   

      // Save user preferences. We need an Editor object to
 
      // make changes. All objects are from android.context.Context
 
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
 
      SharedPreferences.Editor editor = settings.edit();
 
      editor.putBoolean("silentMode", mSilentMode);
 
 
 
      // Don't forget to commit your edits!!!
 
      editor.commit();
 
    }
 
}
 

文件Files
 
你可以直接在移動設備或可移動存儲媒介裏存放文件。缺省情況下,其它應用程序不能訪問這些文件。
 
爲了從文件中讀取數據,可調用Context.openFileInput()方法並傳遞本地文件名和文件路徑給它。該方法返回一個標準的Java FileInputStream 對象。爲了寫一個文件,可調用Context.openFileOutput()並傳遞文件名和路徑,這個方法也返回FileOutputStream對象。從另外的應用程序中調用這些方法將不起作用,你只能訪問本地文件。
 
如果你有一個靜態文件需要在編譯時打包進應用程序,你可以保存該文件在你項目中res/raw/myDataFile,然後使用Resources.openRawResource (R.raw.myDataFile)打開它。該方法返回一個InputStream對象,你可以使用它讀取文件數據。
 

數據庫Databases
 
Android API包含對創建和使用SQLite數據庫的支持。每個數據庫都是創建它的應用程序所私有的。
 
這個SQLiteDatabase對象代表了一個數據庫幷包含與之交互的方法-生成查詢和管理數據。爲了創建數據庫,調用SQLiteDatabase.create()並同時子類化SQLiteOpenHelper。
 
作爲支持SQLite數據庫的一部分,Android暴露了數據庫管理函數,這讓你可以存儲複雜的數據集合,這些數據被包裝到有用的對象裏。比如,Android爲聯繫人信息定義了一個數據類型;它由很多字段組成,其中包括姓,名(字符串),地址信息和電話號碼(也是字符串),照片(位圖圖像),以及更多其它個人信息。
 
Android裝載了sqlite3數據工具, 利用這些工具你可以瀏覽表內容,運行SQL命令,並執行SQLite數據庫上的其它有用的函數。請查閱檢查數據庫(Examine databases (sqlite3))得知如何運行這個程序。
 
所有的數據庫,SQLite以及其它,都被保存在設備如下目錄裏:
 
/data/data/package_name/databases.
 
討論創建多少表格,包含哪些字段以及它們之間如何連接超出了本文的範圍,不過Android並沒有引入任何在標準SQLite概念之外的限制。我們確實推薦包含一個自增長數值的關鍵域,作爲一個唯一ID用來快速查找一個記錄。這對於私有數據並不必要,但如果你實現了一個內容提供器,你必須包含這樣一個唯一ID字段。請參見Content Providers文檔以獲取關於該字段的更多信息,以及NotePadProvider類(在NotePad例子代碼裏)中創建和組裝一個新數據庫的方法。你創建的任何數據庫都將可以通過名字被應用程序中其它的類訪問,但不能從應用程序外部訪問。
 

網絡Network
 
你也可以使用網絡來存放和獲取數據(當它可用時)。要進行網絡操作,可使用如下程序包中的類:
 
·         java.net.*
 
·         android.net.*


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/iefreer/archive/2009/09/07/4528389.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章