使用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.運行程序,進行測試