当前位置: 代码迷 >> Android >> Android数据储存方式(二)SharedPreferences(偏好参数保存)
  详细解决方案

Android数据储存方式(二)SharedPreferences(偏好参数保存)

热度:43   发布时间:2016-05-01 11:35:08.0
Android数据存储方式(二)SharedPreferences(偏好参数保存)

本篇来介绍一下Android数据存储的第二中方式:SharedPreferences,这种方式在保存软件的各项参数时应用最广泛,一般采用.xml文件来进行存放。

实现的简单界面如下:



在Activity的子类中,我们可以通过两种方式来获取

第一种是:

   getPreferences(MODE_PRIVATE);  //这种方式默认采用所在的类名作为xml文件的名称

第二种是:

getSharedPreferences("preferencesFile", Context.MODE_PRIVATE); //我们可以指定参数保存文件的文件名称

本篇中采用第二种方式在service对象中指定保存的文件名称。


工程目录结构:



源代码:

main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/username" />    <EditText         android:id="@+id/name"        android:layout_width="fill_parent"        android:singleLine="true"        android:layout_height="wrap_content"/>    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/age" />    <EditText         android:id="@+id/age"        android:layout_width="fill_parent"        android:numeric="integer"        android:singleLine="true"        android:layout_height="wrap_content"/>    <Button         android:id="@+id/save"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/save"        android:onClick="save"/></LinearLayout>

Strings.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">Hello World, MainActivity!</string>    <string name="app_name">软件参数设置</string>    <string name="username">姓名</string>    <string name="age">年龄</string>    <string name="save">保存参数</string></resources>

MainActivity.java

package com.preferences.activity;import java.util.Map;import com.preferences.service.PreferencesService;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {	private EditText name;	private EditText age;	private PreferencesService service;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        name = (EditText)findViewById(R.id.name);        age = (EditText)findViewById(R.id.age);        service = new PreferencesService(MainActivity.this);        //打开时读取保存的参数        Map<String,String> params = service.getPreferences();        name.setText(params.get("username"));        age.setText(params.get("age"));    }    public void save(View v){    	String userName = name.getText().toString();    	int userAge = Integer.parseInt(age.getText().toString());    	service.save(userName, userAge);    	Toast.makeText(MainActivity.this, "保存成功", 1).show();    }}

PreferencesService.java

package com.preferences.service;import java.util.HashMap;import java.util.Map;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;public class PreferencesService {	private Context context;	//构造方法中传入上下文对象	public PreferencesService(Context context) {		super();		this.context = context;	}	/**	 * 保存参数	 * @param name 姓名	 * @param age 年龄	 */	public void save(String name,int age){		SharedPreferences sharedPreferences = context.getSharedPreferences("itcastPreference", Context.MODE_PRIVATE);		Editor editor = sharedPreferences.edit();		editor.putString("username", name);		editor.putInt("age", age);	//目前是保存在内存中,还没有保存到文件中		editor.commit();	//数据提交到xml文件中	}		/**	 * 获取各项配置参数	 * @return params	 */	public Map<String,String> getPreferences(){		SharedPreferences sharedPreferences = context.getSharedPreferences("itcastPreference", Context.MODE_PRIVATE);		Map<String,String> params = new HashMap<String, String>();		params.put("username", sharedPreferences.getString("username", ""));		params.put("age", String.valueOf(sharedPreferences.getInt("age", 0)));		return params;	}}

当我们点击保存参数按钮之后,数据会保存到 /data/data/ [packagename] /shared_prefs目录下:



  相关解决方案