資料存儲的方式有以下幾種:(有其它方法的再來此處加)
1.SharedPreferences(輕量級存儲方式)
1.1:通過此種方式,使用者可以将NVP(Name/Value/Pair,名稱/值對)儲存在ANDROID的檔案系統中,而且SharedPreferences完全屏蔽對檔案系統的操作過程,開發人員僅是通過調用 SharedPreferences對NVP進行儲存和讀取。。。。吼吼。
2.經典的檔案存儲->>一般使用INI檔案或XML檔案存儲
3.輕量級SQlite資料庫存儲
4.使用者自定義檔案格式存儲
SharedPreferences詳解:
此種方式不僅能儲存資料,還能夠實作不同應用程式間的資料共享。SharedPreferences支援三種通路模式:
私有(MODE_PRIVATE)
僅有建立程式有權限對其進行讀取或寫入;
全局讀(MODE_WORLD_READABLE)
不僅建立程式可以對其進行讀取或寫入,其他應用程式也讀取操作的權限,但沒有寫入操作的權限;
全局寫(MODE_WORLD_WRITEABLE)
建立程式和其他程式都可以對其進行寫入操作,但沒有讀取的權限。
但有時也可以把權限寫成既可以全局讀,也可以全局寫,可以寫成以下:
public static int MODE=Context.MODE_WORLD_REEADABLE+Context.MODE_WORLD_WRITEABLE;
除了定義SharedPreferences的通路模式,還要定義SharedPreferences的名稱,這個名稱與在Android檔案系統中儲存的檔案同名。是以,隻要具有相同的SharedPreferences名稱的NVP内容,都會儲存在同一個檔案中,定義如下;
public static final String PREFERRNCE_NAME="SaveSetting";
為了可以使用SharedPreferences,需要次通路模式和SharedPreferences名稱作為參數,傳遞到getSharedPreferences()函數中,并擷取到SharedPreferences對象,定義如下:
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME,MODE);
在擷取到SharedPreferences 對象後,可以調用SharedPreferences.Editor類對SharedPreferences進行修改,最後調用commit()函數送出即可完成儲存修改内容,其中,SharedPreferences支援很多資料類型如:基本資料類型、包括整型、布爾型、浮點型、長型等。定義如下:
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name",XiaoMaGuo);
editor.putString("Age",22);
editor.putFloat("Height",1.85f);
editor.commit();
從已儲存的SharedPreferneces中讀取資料時的原理同上,同樣是調用getSharedPreferences()函數,并在函數的第一個參數中指明需要通路的SharedPreferences名稱,定義如下:
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME,MODE);
String name = sharedPreferences.getString("Name","Default_Name");
int age = sharedPreferences.getInt("Age",Default_Age);
float height = sharedPreferences("Height","Default_Height");
其中第二個參數 :“見名知意咯。。”
為什麼照着我的方法是正常的??
@Override
protected void onStart() {
super.onStart();
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE);
String name = sharedPreferences.getString("Name", "外星人沒名字");
int age = sharedPreferences.getInt("Age", 20);
Toast.makeText(ShowPreferences.this, "XM=="+name+"....NL==="+age, Toast.LENGTH_LONG).show();
}
為什麼我在程式中這樣取不到?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
Context context = null;
try {
context = ShowPreferences.this.createPackageContext(PREFERENCES_PACKAGE, Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
e.printStackTrace();
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE);
XM = (TextView)findViewById(R.id.XM);
System.out.println(XM+"****"+NL+"*****"+SG);
NL = (TextView)findViewById(R.id.NL);
SG = (TextView)findViewById(R.id.SG);
// float height = sharedPreferences.getFloat("Height", 180.0f);
//将取到的值顯示在TextView中
XM.setText(name);
NL.setText(age);
OL = (Button)findViewById(R.id.OL);
OL.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
});
}
小插曲:
小孟同志發了一短信,好多字不認識,中文…………V_V……O_O…………哇哇。
小結:
由此可見,通路其他應用程式的SharedPreferences必須滿足三個條件:
1.共享者需要将SharedPreferences的通路模式設定為全局讀或全局;
2.通路者需要知道共享者的包名稱和SharedPreferences的名稱,以通過Context獲得SharedPreferences對象;
3.通路者需要确切知道每個資料的名稱和資料類型,用以正确讀取資料。
<b> 本文轉自華華世界 51CTO部落格,原文連結:</b>
<b>http://blog.51cto.com/mzh3344258/733371</b>
<b>,如需轉載請自行聯系原作者</b>