1.SharedPreferences是Android系统提供的轻量级的数据保存方式,是将数据以最简单的方式进行永久性保存,在应用程序的使用中,用户经常会根据自己的习惯和偏好等更改应用程序的设置,或设定个性化内容,其中SharedPreferences类背后是用xml文件存放数据,SharedPreferences不仅能够保存数据,还能够实现不同应用程序间的数据共享,其中用getSharedPreferences(name,mode)方法的第一个参数用于指定该xml文件的名称,名称不用带扩展名,Android系统会默认加上,方法中第二个参数指的是xml文件的操作模式,其中它有三种模式。一种为私有( Context.MODE_PRIVATE),一种为全局读(Context.MODE_WORLD_READABLE),一种为全局写(Context.MODE_WORLD_WRITEABLE),也可以读写操作模式(Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE),另外Activity还提供另一个getPreferences(mode)的方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为xml文件的名称。
2.接下来新建一个安卓项目,项目名为SharedPreferences,首先进行界面布局,打开res目录下的layout文件夹下的activity_main.xml文件,其中点击按钮将会调用MainActivity.java文件中的save()方法,代码附上:
activity_main.xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/name" />
<EditText
android:id="@+id/nameEt"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/age" />
<EditText
android:id="@+id/ageEt"
android:numeric="integer"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/hobby" />
<EditText
android:id="@+id/hobbyEt"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save"
android:onClick="save"/>
</LinearLayout>
3.接下来打开src目录下指定包名的MainActivity.java文件,里面有简单注释,其中按钮点击后调用save()方法,其中利用SharedPreferences类是在PreferencesService类下实现对数据的存放和保存并获取,详细看代码,其中MainActivity.java文件在com.example.sharedpreferencestest包下,PreferencesService.java在com.example.service包下,先附上MainActivity.java文件的代码,再附上PreferencesService.java的代码:
MainActivity.java文件:
package com.example.sharedpreferencestest;
import java.util.Map;
import com.example.service.PreferencesService;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText nameText;
private EditText ageText;
private EditText hobbyText;
private PreferencesService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameText=(EditText)findViewById(R.id.nameEt);//获得输入姓名的编辑框控件
ageText=(EditText)findViewById(R.id.ageEt);//获得输入年龄的编辑框控件
hobbyText=(EditText)findViewById(R.id.hobbyEt);//获得输入爱好的编辑框控件
service=new PreferencesService(MainActivity.this);//实例化一个PreferencesService对象
Map<String,String> params=service.getPreferences();//调用PreferencesService类的getPreferences()方法,获取各项参数
nameText.setText(params.get("name"));//设置姓名编辑框的内容
ageText.setText(params.get("age"));//设置年龄编辑框的内容
hobbyText.setText(params.get("hobby"));//设置爱好编辑框的内容
}
public void save(View v){
String name=nameText.getText().toString();//获取姓名编辑框中的内容
int age=Integer.parseInt(ageText.getText().toString());//获取年龄编辑框中的内容,并转换为整型
String hobby=hobbyText.getText().toString();//获取姓名编辑框中的内容
service.save(name,age,hobby);//调用PreferencesService类的方法
Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_SHORT).show();//弹出"保存成功"的消息提示框
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
PreferencesService.java文件:
package com.example.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) {
this.context = context;
}
/**
* 保存参数
* @param name 姓名
* @param age 年龄
* @param hobby 爱好
*/
public void save(String name, int age, String hobby) {
// TODO Auto-generated method stub
SharedPreferences preferences=context.getSharedPreferences("set", Context.MODE_PRIVATE);//获得Sharedpreferences对象,并把各项参数设置保存在set.xml文件下,并设置文件的操作模式为是私有的
Editor editor=preferences.edit();//调用SharedPreferences类的编辑方法,获得编辑器对象,再往里面存放数据
editor.putString("name", name);//存放姓名参数,只保存在preferences对象中,即内存中
editor.putInt("age", age);//存放年龄参数,只保存在preferences对象中,即内存中
editor.putString("hobby", hobby);//存放爱好参数,只保存在preferences对象中,即内存中
editor.commit();//把内存中的内容提交到文件中
}
/**
* 获取各项参数
* @return
*/
public Map<String,String> getPreferences(){
Map<String,String> params=new HashMap<String, String>();
SharedPreferences preferences=context.getSharedPreferences("set", Context.MODE_PRIVATE);//获得Sharedpreferences对象,并把各项参数设置保存在set.xml文件下,并设置文件的操作模式为是私有的
params.put("name", preferences.getString("name", ""));
params.put("age", String.valueOf(preferences.getInt("age", 0)));
params.put("hobby", preferences.getString("hobby", ""));
return params;
}
}
4.接下来附上此项目所用到的字符串string.xml文件的代码:
strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">SharedPreferencesTest</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="name">姓名:</string>
<string name="age">年龄:</string>
<string name="hobby">爱好:</string>
<string name="save">保存参数</string>
<string name="success">保存成功</string>
</resources>
5.这就完成了利用SharedPreferences来进行简单数据存取,运行该项目,运行效果会出现年龄那个编辑框内容为0,是因为代码里面设置了的原因,我进行测试时是如下图这样的,已经点击了保存参数这个按钮,并已经保存成功:
6.如果在我们运行项目后,这里需要用到一个视图工具,查看下eclipse下的视图工具File Explorer,这个要打开很简单,在Eclipse工具栏上有个Window,点击下拉菜单有show view的Other子菜单,依照下图可以找到:
此时输入各项编辑框内容后,没点击保存参数按钮时,查看File Explorer视图,在data目录下的data目录下有相应的包名,找到这个项目的包名,如下图所示:
这时包下只有一个lib目录,点击保存参数按钮后,视图发生下图的改变,多了两个文件夹,其中cache是缓存文件,另一个是shared_prefs目录,下面有个set.xml文件,即是我所利用sharedPreferences来进行简单存储的set.xml文件:
7.接下来我们把那个set.xml文件导出到我的计算机看看,点击下图箭头指向的那个图标:
8.导出之后用记事本查看一下,看我们所配置的参数是否保存在此xml文件中,打开后如下图:
9.从上图发现输入到编辑框里的各项参数都保存到xml文件中了,其实上面的代码还有一样功能,就是你退出本安卓应用后,再次打开,里面的各项参数还照样显示,因为在PreferencesService类里面获取了第一次所输入的参数内容,然后在MainActivity.java文件下又设置了编辑框文本内容,所以第二次甚至第三次打开还会显示,除非里面的参数项被改变并点击了保存按钮,这个需要大家去实验一下,理解代码了,即如下图一样:
10.以上就是如何使用SharedPreferences来进行简单存储的内容,仅供大家学习参考,写得不好,请见谅,如有错误请指出,谢谢!