廢話不多講,直接入題:以下,SharedPreferences小馬就簡稱SP了:
SP一般建議在全局檔案中操作,即:在繼承Application的擴充類中操作,這樣做的原因是SP隻是為了存儲一些應用及遊戲配置,并不能存儲大量資料,而且操作次數也不會太過頻繁,是以建議在全局中操作和使用哦:
先來看下效果圖:主要看效果圖下面的講解,嘿嘿
<a href="http://blog.51cto.com/attachment/201112/064208309.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201112/064228921.jpg" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201112/064246507.jpg" target="_blank"></a>
将XML檔案導出後的結果如下圖:
<a href="http://blog.51cto.com/attachment/201112/064538565.jpg" target="_blank"></a>
package com.mzh.www;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
* @Title: SharedPreferencesDemo.java
* @Package com.mzh.www
* @Description: SharedPreferences資料存儲測試
* @author mzh
* @version V2.2
*/
public class SharedPreferencesDemo extends Activity {
//聲明
private EditText XM ;
private EditText NL ;
private EditText SG ;
private Button saveBtn ;
private Button cancelBtn;
//SharedPreferences
//SP檔案名
private static final String PREFERENCES_NAME = "XiaoMa_Guo";
/**
* 存儲模式:
* 有四種模式,如果疊加模式可用以下寫法,小馬此例中僅疊加兩種
* MODE_PRIVATE 預設的模式,一般情況下使用
* MODE_WORLD_READABLE 全局讀
* MODE_WORLD_WRITEABLE 全局寫
* MODE_MULTI_PROCESS 多程序間通路使用
* 以上模式中全局指在任何地方都可以通路,至于操作得看是可以讀 還是可以寫啦
*/
private static final int PREFERENCES_MODE
= Context.MODE_WORLD_READABLE
+Context.MODE_WORLD_WRITEABLE;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//資源定位
XM = (EditText)findViewById(R.id.XM);
NL = (EditText)findViewById(R.id.NL);
SG = (EditText)findViewById(R.id.SG);
//添加監聽
saveBtn = (Button)findViewById(R.id.Save);
cancelBtn = (Button)findViewById(R.id.Cancel);
saveBtn.setOnClickListener(listener);
cancelBtn.setOnClickListener(listener);
}
* 監聽哭實作
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.Save:
saveSharedPreferences();
break;
case R.id.Cancel:
finish();
default:
}
}
/**
* 實作往SP中存值
*/
private void saveSharedPreferences() {
//這個地方取SP檔案的方式有兩種:
//方法一如下:
//這種方式是取得指定的那個SP檔案
SharedPreferences sharedPreferences =
getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE);
//下面貼下getSharedPreferences方法的源碼:
/**小馬英語一般,剛看這個很怕,但可以借助工作查嘛,朋友們也可以自己嘗試下翻譯它
* Retrieve and hold the contents of the preferences file 'name', returning
* a SharedPreferences through which you can retrieve and modify its
* values. Only one instance of the SharedPreferences object is returned
* to any callers for the same name, meaning they will see each other's
* edits as soon as they are made.
*
* @param name Desired preferences file. If a preferences file by this name
* does not exist, it will be created when you retrieve an
* editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
* @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the
* default operation, {@link #MODE_WORLD_READABLE}
* and {@link #MODE_WORLD_WRITEABLE} to control permissions.
* @return Returns the single SharedPreferences instance that can be used
* to retrieve and modify the preference values.
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
* 寫這麼一大段,意思一句總結,就是有多個SP檔案存在時,可以用指定的SP檔案名與模式取SP檔案,簡單吧?而且這個裡面的檔案
* 名可以自定義,如果檔案不存在,它會自動建立的啦,如:XiaoMaGuo.xml
* SharedPreferences aPrefs = getSharedPreferences("XiaoMaGuo", 0);
public abstract SharedPreferences getSharedPreferences(String name,
int mode);
*/
/*//方法二如下:
//這種方式是取得預設的那個SP檔案
sharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);*/
//下面貼段源碼,加深上PreferenceManager方式的了解:
/**
* Used to help create {@link Preference} hierarchies
* from activities or XML.
* <p>
* In most cases, clients should use别的先不看,這句意思:在有多個分支,或者說多個SP檔案時
* {@link PreferenceActivity#addPreferencesFromIntent} or 這個的意思是:從比對的Intent中加載SP檔案
* {@link PreferenceActivity#addPreferencesFromResource(int)}.這個意思是:通過指定的XML檔案,将加載此
* XML檔案到目前SP層級中,也就是把指定的XML檔案加載到目前的配置中來,吼吼
*
* @see PreferenceActivity
public class PreferenceManager {*/
//取編輯對象的方法一樣
SharedPreferences.Editor editor = sharedPreferences.edit();
if(
!"".equals(XM.getText().toString())
&&!"".equals(NL.getText().toString())
&&!"".equals(SG.getText().toString())
){
editor.putString("Name", XM.getText().toString());
editor.putInt("Age", Integer.parseInt(NL.getText().toString()));
editor.putFloat("Height", Float.parseFloat(SG.getText().toString()));
editor.commit();
Toast.makeText(SharedPreferencesDemo.this, "資料儲存成功!",
Toast.LENGTH_LONG).show();
Intent intent = new Intent(SharedPreferencesDemo.this,ShowPreferences.class);
startActivity(intent);
}else{
Toast.makeText(SharedPreferencesDemo.this, "資料不完整,儲存失敗!", Toast.LENGTH_LONG).show();
}
};
}
最後,小馬會把自己的DEMO上傳到附件,供跟小馬處于同一起跑線上的朋友們學習使用,但不要COPY哦,自己敲一遍就記得比較清楚啦,吼吼, 小馬剛開始寫文章,如果有錯誤的地方,請直接批評指出,批評就是對我最好的提高,最後,謝謝看文章的你給小馬多提些建議,小馬有錯的地方肯定不含糊,絕對會改正,謝謝
<a href="http://down.51cto.com/data/2359525" target="_blank">附件:http://down.51cto.com/data/2359525</a>
本文轉自華華世界 51CTO部落格,原文連結:http://blog.51cto.com/mzh3344258/747124,如需轉載請自行聯系原作者