原文鏈接:http://www.orlion.ga/578/ Android系統中主要提供了三種方式用於簡單地實現數據持久化功能,即文件存儲、SharedPreference存儲以及資料庫存儲。當然,除了這三種方式之外,你還可以將數據保存在手機的 SD卡中,不過使用文件、SharedPreferen ...
原文鏈接:http://www.orlion.ga/578/
Android系統中主要提供了三種方式用於簡單地實現數據持久化功能,即文件存儲、SharedPreference存儲以及資料庫存儲。當然,除了這三種方式之外,你還可以將數據保存在手機的 SD卡中,不過使用文件、SharedPreference或資料庫來保存數據會相
對更簡單一些,而且比起將數據保存在 SD卡中會更加的安全
一、文件存儲
1、將數據存儲到文件中
Context類中提供了一個 openFileOutput ()方法,可以用於將數據存儲到指定的文件中。這個方法接收兩個參數,第一個參數是文件名,在文件創建的時候使用的就是這個名稱,註意這裡指定的文件名不可以包含路徑,因為所有的文件都是預設存儲到/data/data/<packagename>/files/目錄下的。第二個參數是文件的操作模式,主要有兩種模式可選,MODE_PRIVATE和MODE_APPEND。其中 MODE_PRIVATE是預設的操作模式,表示當指定同樣文件名的時候,所寫入的內容將會覆蓋原文件中的內容,而 MODE_APPEND則表示如果該文件已存在就往文件裡面追加內容,不存在就創建新文件。其實文件的操作模式本來還有另外兩種,MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE,這兩種模式表示允許其他的應用程式對我們程式中的文件進行讀寫操作, 不過由於這兩種模式過於危險,很容易引起應用的安全性漏洞,現已在 Android 4.2版本中被廢棄
openFileOutput ()方法返回的是一個 FileOutputStream對象,得到了這個對象之後就可以使用 Java流的方式將數據寫入到文件中了。如下是代碼示例:
public void save() { String data = "Data to save"; FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(data); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); } } catch (IOException e) { e.printStackTrace(); } } }
2、從文件中讀取數據
Context類還提供了一個openFileInput()方法用於從文件中讀取數據。這個方法要比openFileOutput()簡單一些,它只接收一個參數,即要讀取的文件名,然後系統會自動到/data/data/<package name>/files/目錄下去載入這個文件,並返回一個FileInputStream對象。
代碼示例:
public String load() { FileInputStream in = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { content.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString(); }
二、SharedPreferences存儲
SharedPreferences是使用鍵值對的方式來存儲數據的,SharedPreferences還支持多種不同的數據類型存儲,如果存儲的數據類型是整型,那麼讀取出來的數據也是整型的,存儲的數據是一個字元串,讀取出來的數據仍然是字元串。
1、將數據存儲到SharedPreferences中
要想使用SharedPreferences來存儲數據,首先要獲取到SharedPreferences對象。Android主要提供了三種方式獲取SharedPreferences對象
-
Context類中的getSharedPreferences()方法
此方法接收兩個參數,第一參數用於指定SharedPreferences文件的名稱,如果不存在則創建一個,SharedPreferences文件都是存放在/data/data/<packagename>/shared_prefs目錄下。第二個參數用於指定操作模式,主要有兩種模式,MODE_PRIVATE和MODE_MULTI_PROCESS。MODE_PRIVATE是預設的操作模式,和直接傳入)效果是相同的,表示只有當前的應用程式才可以對這個SharedPreferences文件進行讀寫。MODE_MULTI_PROCESS則一般是用於會有多個進程中對同一個SharedPreferences文件進行讀寫的情況。MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE這兩種模式已在 Android 4.2版本中被廢棄
-
Activity類中的getPreferences()方法
這個方法和 Context中的 getSharedPreferences()方法很相似,不過它只接收一個操作模式參數,因為使用這個方法時會自動將當前活動的類名作為 SharedPreferences的文件名。
-
PreferenceManager類中的getDefaultSharedPreferences()方法
這是一個靜態方法,它接收一個Context參數,並自動使用當前應用程式的包名作為首碼來命名SharedPreferences文件
得到了SharedPreferences對象後,就可以開始向SharedPreferences文件中存儲數據了,主要有三步:
-
調用SharedPreferences對象的edit()方法來獲取一個SharedPreferences.Editor對象
-
向SharedPreferences.Editor對象中添加數據,比如添加一個布爾類型的數據就使用putBoolean()方法,添加字元串就使用putString()。
-
調用commint()方法將添加的數據提交,從而完成數據存儲操作。
2、從SharedPreferences中讀取數據
SharedPreferences對象中提供了一系列的get方法用於對存儲的數據進行讀取, 每種get方法都對應了SharedPreferences.
Editor中的一種 put方法,比如讀取一個布爾型數據就使用 getBoolean()方法,讀取一個字元串就使用 getString()方法。這些 get方法都接收兩個參數,第一個參數是鍵,傳入存儲數據時使用的鍵就可以得到相應的值了,第二個參數是預設值,即表示當傳入的鍵找不到對應的值時,會以什麼樣的預設值進行返回。例:
SharedPreferences pref = getSharedPreferences("data" , MODE_PRIVATE); String name = pref.getString("name" , ""); int age = pref.getInt("age" , 0); Boolean sex = pref.getBoolean("sex", true); Log.d("SharedPreferences", name); Log.d("SharedPreferences", "age=" + age); Log.d("SharedPreferences", "sex=" + sex);