標籤:
Android中的資料存放區
資料持久化就是指那些記憶體中的瞬時資料儲存到存放裝置中。Android系統中主要提供了三種方式用於簡單地實現
資料持久功能,即檔案儲存體、SharedPreferences儲存和資料庫儲存。
1.檔案儲存體是Android中一種基本的儲存方式,它不對儲存的內容進行任何的格式化處理,所有的資料是原封不動的
儲存到檔案中。
1.1
Context類中提供了一個openFileOutput()方法,可以用於將資料存放區到指定的檔案。
這個方法接收兩個參數:
1.第一個參數是檔案名稱,(檔案名稱中不可以包含路徑,所有的檔案都是預設儲存在/data/data/<package name>/files/目錄下)。
2.第二個參數是檔案的操作模式,(主要有兩種操作模式可選:1.MODE_PRIVATE和MODE_APPEND,其中
MODE_PRIVATE是預設的操作模式,表示當指定同樣檔案名稱的時候,所寫入的內容將會覆蓋原檔案中的內容;
MODE_APPEND表示如果該檔案已存在就往檔案裡面追加內容,不存在就建立新檔案。)
openFileOutput()方法返回的是一個FileOutputStream對象,得到這個對象後就可以使用Java流的方式將資料寫在檔案中了。
下面的代碼,展示了如何把一段常值內容寫在檔案中:
public void save (String inputText) { 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(inputText); } catch (IOException e) { e.printStackTrace(); }finally { try { if (writer != null){ writer.close(); } } catch (IOException e) { e.printStackTrace(); } } }
上述的代碼中,通過openFileOutput()方法能夠得到一個FileOutputStream對象,然後在藉助它構建出一個
OutputStreamWriter對象,接著再使用OutputStreamWriter構建出一個BufferedWriter對象,這樣就可以通過
BufferedWriter來將常值內容寫入到檔案中了。
1.2
Context類中還提供了一個openFileInput()方法,用於從檔案中讀取資料。
這個方法只接收一個參數,即要讀取的檔案名稱,然後系統會自動到/data/data/<package name>/files/目錄下
去載入這個檔案,並返回一個FileInputStream對象,得到這個對象後通過java流的方式可以將資料讀取出來了。
下面是程式碼範例,展示如何從檔案中讀取文本資料:
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(); }
上述的代碼中,首先通過openFileInput()方法擷取得到一個FileInputStream對象,然後藉助它構建出一個InputStreamReader對象,
接著再使用InputStreamReader構建出一個BufferedReader對象,這樣就可以使用BufferedReader進行一行行地讀取,把檔案
中的內容全部讀取出來並存在在一個StringBuilder對象中,最後將讀取的內容返回即可。
2.SharedPreferences是使用索引值對的方式來儲存資料的。
2.1
要用sharedPreferences來儲存資料,首先需要擷取到SharedPreferences對象。Android中主要提供了三種方法用於
得到SharedPreferences對象。
1).Context類中的getSharedPreferences()方法
該方法接收兩個參數,第一個參數用於指定SharedPreferences檔案的名稱,如果指定的檔案名稱不存在則會建立一個,
SharedPreferences檔案都是存在/data/data/<package name>/shared_prefs/目錄下的;
第二個參數用於指定操作模式,主要有兩種模式可以選擇,MODE_PRIVATE和MODE_MULTI_PROCESS。
其中MODE_PRIVATE是預設的操作模式,表示只有當前的應用程式才可以對這個sharedPreferences檔案進行讀寫。
MODE_MULTI_PROCESS一般用於對個進程中對同一個SharedPreferences檔案進行讀寫的情況。
2).Activity類中的getPreferences()方法
3).preferenceManager類中的getDefaultSharedPreferences()方法
得到了SharedPreferences對象之後,就可以向檔案中儲存資料了,主要可以分為三部實現:
1).調用SharedPreferences對象的edit()方法來擷取一個SharedPreferences.Editor對象。
2).向SharedPreferences.Editor對象中添加資料。比如添加一個字串就用putString()方法.
3).調用commit()方法將添加的資料提交.
具體實現如下面的代碼所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/save_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/save_data"/></LinearLayout>
設定一個按鈕,用於儲存資料到檔案中。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saveData = (Button) findViewById(R.id.save_data); //對saveData設定監聽器 saveData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //調用SharedPreferences對象的edit()方法來擷取一個SharedPreferences.Editor對象。 //Context類中的getSharedPreferences()方法來擷取SharedPreferences對象,該方法接收兩個參數 //1.第一個參數用於指定SharedPreferences檔案的名稱,如果指定的檔案不存在,則會建立一個。 //2.第二個參數用於指定操作模式,主要有兩種操作模式可選(MODE_PRIVATE和MODE_MULTI_PROCESS) SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit(); //向SharedPreferences.Editor對象中添加資料。比如添加一個字串就用putString()方法 editor.putString("name","Tom"); editor.putInt("age",22); //調用commit()方法將添加的資料提交 editor.commit(); } });
上述的代碼中,點擊按鈕通過getSharedPreferences()方法得到SharedPreferences的檔案名稱為data,並得到了
SharedPreferences.Editor的對象。接著添加資料,最後調用commit() 方法進行提交。
2.2
從SharedPreferences中讀取資料
SharedPreferences對象中提供了一系列的get方法用於對儲存的資料進行讀取,每種get方法都對應了
SharePreferences.Editor中的一種put方法。
具體的實現如下面的代碼所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/save_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/save_data"/> <Button android:id="@+id/restore_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/restore_data"/></LinearLayout>
修改MainActivity中的代碼,如所示:
restoreData = (Button) findViewById(R.id.restore_data); //對restoreData按鈕設定監聽器 restoreData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //通過getSharedPreferences()方法得到SharedPreferences的對象 SharedPreferences sharedPre = getSharedPreferences("data", MODE_PRIVATE); //通過get方法得到資料 String name = sharedPre.getString("name",""); int age = sharedPre.getInt("age", 0); Log.d("MainActivity","name is " + name); Log.d("MainActivity","age is " + age); } });
上述的代碼中,首先通過getSharedPreferences()方法得到了SharedPreferences對象,然後調用get方法擷取資料,
如果沒有找到相應的值就會使用方法中傳入的預設值來代替。
Android學習筆記(十四)