Android數據存儲與訪問之使用SharedPreferences進行數據存儲

使用SharedPreferences進行數據存儲

       使用SharedPreferences進行數據存儲是Android提供的用來存儲一些簡單配置信息的一種機制(偏好參數保存),採用了XML格式將數據存儲到設備中。通過getSharedPreferences()方法來獲得SharedPreferences接口,通過編輯器保存提交內容,通過接口的getString()方法來讀取內容;其採用了Map數據結構來存儲數據,以鍵值的方式存儲,可以簡單的讀取與寫入。

       下面就是今天要完成的列子:(存儲要求:點擊保存按鈕能將用戶輸入的數據保存到設備中,讀取要求:當用戶初始化Activity的時候能將之前一次保存的數據回顯到輸入框中)


1.首先完成佈局文件(年齡的輸入框要設置只能輸入數字android:numeric=”integer”;還有保存按鈕我們設置一個點擊方法android:onClick=”save”)。

2.根據MVC的設計風格,我們將保存數據的業務方法save(name, age),單獨編寫一個業務類PreferencesService,通過上下文對象的getSharedPreferences(name,mode)方法來獲得SharedPreferences對象,在通過編輯器進行提交保存。而訪問SharedPreferences中的數據是通過SharedPreferences對象的getString()方法。
public class PreferencesService {
	private Context context;

	public PreferencesService(Context context) {
		this.context = context;
	}
	//保存數據
	public void save(String name, Integer age) {
		//這裏傳入的文件名不能加.xml的擴展名,因爲這個API默認保存的就是xml文件
		SharedPreferences preferences  = context.getSharedPreferences("android", context.MODE_PRIVATE);
		Editor editor = preferences.edit();
		editor.putString("name", name);
		editor.putInt("age", age);
		editor.commit();
	}
	//獲取各項配置參數
	public Map<String, String> getPreference() {
		SharedPreferences preferences  = context.getSharedPreferences("android", context.MODE_PRIVATE);
		Map<String, String> map = new HashMap<String, String>();
		//getString()第二個參數爲缺省值,如果preference中不存在該key,將返回缺省值
		map.put("name", preferences.getString("name", ""));
		map.put("age", preferences.getInt("age", 0)+"");
		return map;	
	}
}

3.編寫完善MainActivity中的代碼
public class MainActivity extends Activity {
	private EditText nameET, ageET;
	private PreferencesService service;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        nameET = (EditText) findViewById(R.id.name);
        ageET = (EditText) findViewById(R.id.age);
        service = new PreferencesService(MainActivity.this);
        Map<String, String> map = service.getPreference();
        nameET.setText(map.get("name"));
        ageET.setText(map.get("age"));
        
    }
    //按鈕單機事件
    public void save(View v) {
    	String name = nameET.getText().toString();
    	String age = ageET.getText().toString();
    	service.save(name, Integer.valueOf(age));
    	Toast.makeText(MainActivity.this, R.string.success, 1).show();
    }
}
4.運行程序,進行測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章