19、從頭學Android之Android的資料存放區–SharedPreferences

來源:互聯網
上載者:User

SharedPreferences簡介

在Android開發過程中,有時候我們需要儲存一些簡單的軟體配置等簡單資料的資訊,而如果我們直接用資料庫儲存的話又不太方便,在這裡我們就可以用到SharedPreferences,SharedPreferences儲存的資料主要是類似於配置資訊格式的資料,因此儲存的資料主要是簡單類型的索引值對(key-value),它儲存的是一個XML檔案。

SharedPreferences常用的屬性和方法

方法名稱

描述

public abstract boolean contains (String key)

判斷SharedPreferences是否包含特定key的資料

public abstract SharedPreferences.Editor edit ()

返回一個Edit對象用於操作SharedPreferences

public abstract Map<String, ?> getAll ()

擷取SharedPreferences資料裡全部的key-value對

getXXX(String key,XXX defvlaue)

擷取SharedPreferences資料指定key所對應的value,如果該key不存在,返回預設值defValue。其中XXX可以是boolean、float、int、long、String等基本類型的值

由於SharedPreference是一個介面,而且在這個介面裡並沒有提供寫入資料和讀取資料的能力。但是在其內部有一個Editor內部的介面,Edit這個介面有一系列的方法用於操作SharedPreference。

Editor介面的常用方法

方法名稱

描述

public abstract SharedPreferences.Editor clear ()

清空SharedPreferences裡所有的資料

public abstract boolean commit ()

當Editor編輯完成後,調用該方法可以提交修改,而且必須要調用這個資料才修改

public abstract SharedPreferences.Editor putXXX (String key, boolean XXX)

向SharedPreferences存入指定的key對應的資料,其中XXX可以是boolean、float、int、long、String等基本類型的值

public abstract SharedPreferences.Editor remove (String key)

刪除SharedPreferences裡指定key對應的資料項目

 

SharedPreferences是一個介面,程式是無法建立SharedPreferences執行個體的,可以通過Context.getSharedPreferences(String name.int mode)來得到一個SharedPreferences執行個體

name:是指檔案名稱,不需要加尾碼.xml,系統會自動為我們添加上。一般這個檔案儲存體在/data/data/<package name>/shared_prefs下(這個面試常問到)

mode:是指定讀寫方式,其值有三種,分別為:

Context.MODE_PRIVATE:指定該SharedPreferences資料只能被本應用程式讀、寫

Context.MODE_WORLD_READABLE:指定該SharedPreferences資料能被其他應用程式讀,但不能寫

Context.MODE_WORLD_WRITEABLE:指定該SharedPreferences資料能被其他應用程式讀寫。

執行個體:用SharedPreferences進行簡單的操作

package com.jiahui.preferences;import android.app.Activity;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;public class SharedPreferencesDemoActivity extends Activity {private SharedPreferences sharedPreferences;private SharedPreferences.Editor editor;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);sharedPreferences = this.getSharedPreferences("test",MODE_WORLD_READABLE);editor = sharedPreferences.edit();final EditText edtName = (EditText) this.findViewById(R.id.edtName);final EditText edtAge = (EditText) this.findViewById(R.id.edtAge);Button btnRead = (Button) this.findViewById(R.id.btnRead);Button btnWrite = (Button) this.findViewById(R.id.btnWrite);btnRead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 如果沒有這個key就以預設值String name = sharedPreferences.getString("name", null);int age = sharedPreferences.getInt("age", 0);edtAge.setText(String.valueOf(age));edtName.setText(name);}});btnWrite.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String name = edtName.getText().toString();int age = Integer.parseInt(edtAge.getText().toString());editor.putInt("age", age);editor.putString("name", name);// 一定要提交editor.commit();}});}}

實現效果:

 

用File Explorer可以查看在data/data/com.jiahui.preferences/shared_prefs/下多了一個XML檔案

 

將XML檔案匯出我們可以看到在這個XML檔案裡儲存了以下內容:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><int name="age" value="20" /><string name="name">jiahui</string></map>

讀寫其他應用SharedPreferences

在有時的開發過程中,我們可能要訪問其他的應用程式的SharedPreferences,要實現這樣的功能,我們必須要保證要訪問的那個應用程式的SharedPreferences的存取權限要是MODE_WORLD_READABLE,這表明該SharedPreferences可以被其他應用程式讀取,如果指定的MODE_WORLD_WRITEABLE表明該SharedPreferences可以被其他應用程式讀取寫入其實現思路如下

1、  獲得其他應用程式對應的Context

2、  通過這個Context得到這個應用程式的SharedPreferences,然後再利用這個SharedPreferences讀取內容

以上一例的SharedPreference為例。實現代碼:

package com.jiahui.preferences2;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.pm.PackageManager.NameNotFoundException;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;public class SharedPreferencesDemo02Activity extends Activity {private Button btnRead;private EditText edtResult;Context otherContext;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);try {// 擷取其他應用程式的ContextotherContext = createPackageContext("com.jiahui.preferences",CONTEXT_IGNORE_SECURITY);} catch (NameNotFoundException e) {e.printStackTrace();}edtResult = (EditText) this.findViewById(R.id.edtResult);btnRead = (Button) this.findViewById(R.id.btnRead);btnRead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 擷取其他應用程式的SharedPreferencesSharedPreferences preferences = otherContext.getSharedPreferences("test",Context.MODE_WORLD_READABLE);String name = preferences.getString("name", null);int age = preferences.getInt("age", 0);edtResult.setText("訪問的結果為:姓名:" + name + "年齡:" + age);}});}}

 實現效果:

SharedPreferences的注意事項:

編輯完SharedPreferences一定要記得調用Editor的commit()方法,否則不會將資料寫入到檔案裡的。

回顧總結:

1、  如何得到SharedPreferences

SharedPreferences preferences=getPreferences(“test”,MODE_PRIVATE);

2、  如何編輯SharedPreferences

得到Editor對象執行個體

SharedPreferences.Editor editor=preferences.editor();

3、  SharedPreferences的儲存位置

/data/data/<package name>/shared_prefs

 

如需轉載引用請註明出處:http://blog.csdn.net/jiahui524

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.