在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檔案,以後在學習的時候介紹。