Android學習筆記(十四)

來源:互聯網
上載者:User

標籤:

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學習筆記(十四)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.