Android数据存储与访问之使用SharedPreferences进行数据存储

来源:互联网 发布:php是脚本语言吗 编辑:程序博客网 时间:2024/05/21 17:08
使用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.运行程序,进行测试