Android資料存放區(一)Shared Preferences資料存放區

來源:互聯網
上載者:User

在Android中一共提供了4種資料存放區方式,但是由於儲存的這些資料都是其應用程式私人的,所以如果需要在其他應用程式中使用這些資料,就要使用Android提供的Content Provider(資料共用)。

官方文檔中有詳細的描述:http://developer.android.com/guide/topics/data/data-storage.html

Android中4種資料存放區方式分別如下。

1、Shared Preferences:用來儲存“Key-value paires”格式的資料。它是一個輕量級的KVStore for Redis機制,只可以儲存基礎資料型別 (Elementary Data Type)。

2、Files:它通過fileInputStream和FileOutputStream對檔案進行操作。但是在Android中,檔案是一個應用程式私人的,一個應用程式無法讀寫其他應用程式的檔案。

3、SQLite:Android提供的一個標準的資料庫,支援SQL語句

4、Network:通過網路來儲存和獲得資料


一、Shared Preferences資料存放區

Shared Preferences主要是針對系統配置資訊的儲存,比如給程式介面設定了音效,想在下一次啟動時還能夠保留上次設定的音效。由於Android系統的介面是採用Activity棧的形式,所以在系統資源不足時會收回一些介面,因此,有些操作需要在不活動時保留下來,以便等再次啟用時能夠顯示出來。

SharedPreference只允許儲存基礎資料型別 (Elementary Data Type)。

擷取Sharedpreference對象有兩種方式,有Context的執行個體,比如Activity,調用下面的方法:

getSharedPreference():用這種方式獲得Sharedpreference對象,需要在該方法的第一個參數指定該preference檔案的名字

getPreference();用這種方式可以為你的Activity擷取一個唯一的preference檔案,並且不用指定名字。

並且在通過這兩種方式獲得Sharedpreference對象時,還要指定preference檔案的讀模數式,有3種模式(不是4種):

public static final int MODE_PRIVATE = 0x0000;  代表只有該程式可以訪問

public static final int MODE_WORLD_READABLE = 0x0001; 代表其他程式只能進行讀操作

public static final int MODE_WORLD_WRITEABLE = 0x0002; 代表其他程式可以進行讀寫操作

往preference檔案中寫資料:

1、調用edit()方法,擷取一個SharedPreference.Editor對象

2、調用putBoolean()、putString()等等put...()方法儲存資料

3、調用commit()方法,提交資料。因為調用put...()方法, 會先將資料存放區在記憶體中,在調用commit()方法,將資料存放區到preference檔案中,這樣做的好處是不必沒存衣服咯資料,就對檔案操作一次,節省記憶體開銷。

從preference檔案中讀資料:

調用SharedPreference對象的 getBoolean、getString()等等get...()方法讀取資料。

例子:

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, MODE_PRIVATE);       boolean silent = settings.getBoolean("silentMode", false);       setSilent(silent);    }    @Override    protected void onStop(){       super.onStop();      // 儲存資料 We need an Editor object to make preference changes.      // All objects are from android.context.Context      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);      SharedPreferences.Editor editor = settings.edit();      editor.putBoolean("silentMode", mSilentMode);      // 不要忘記提交commit()      editor.commit();    }}

我們知道,SharedPreference 是以索引值對儲存的,從get和put的方式就可以看到,其實preference檔案本身就是一個xml檔案,開啟看看就知道了。

這個用這種方式產生的preference檔案,都有一個固定的位置:

File Explorer / data / data / 包名 / shared_prefs /  檔案名稱字.xml

 

調用其他應用程式的Sharedpreference檔案

要讀取其他應用程式的,那麼那個其他的應用程式的preference檔案必須是可以讀或者可以讀寫的。

步驟:

1、需要建立其他應用程式對應的Context,例如

Context context=createPackageContext("com.tao.androidtest", Context.CONTEXT_IGNORE_SECURITY);   

第一個參數是其他應用許的包名--實際上Android系統是用應用程式的包名來作為該程式的標誌的。

第二個參數為flags 標誌位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY兩個選項。CONTEXT_INCLUDE_CODE的意思是包括代碼,也就是說可以執行這個包裡面的代碼。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加這個標誌的話,有些功能是用不了的,會出現安全警告。

2、在用其他應用程式的Context的getSahredPreference()方法即可擷取相應的SahredPreference對象。

只有那個其他應用程式的preference檔案的Mode設定為MODE_WORLD_READABLE或或者MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE,才能被外部應用程式訪問。

然後用法就可在本程式中使用SahredPreference對象一樣的使用。

當然上面的是通過Android提供的API操作的,也可以自己構建File檔案,在解析裡面的xml檔案在操作,只不過這種方式更為繁瑣。

File file=new File("data/data/com.tao.androidtest/shard_prefs/test.xml");

獲得File檔案,然後去解析裡面的xml檔案,關於如何解析xml檔案,以後在學習的時候介紹。

聯繫我們

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