SharedPreferences的使用非常简单,能够轻松的存放数据和读取数据。SharedPreferences只能保存简单类型的数据,例如,String、int等。一般会将复杂类型的数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存。
使用SharedPreferences保存key-value对的步骤如下:
(1)使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。
(2)使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
(3)通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
(4)通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作。
今天上午自己做了个小例子,下面上传代码:本工程含有两个java文件。
<span style="background-color: rgb(255, 255, 255);">MyPreferenceActivity.java文件如下:本文件主要用来设置界面并存储参数值</span>
<span style="background-color: rgb(255, 255, 255);">public class MyPreferenceActivity extends PreferenceActivity implements OnPreferenceChangeListener{
private EditTextPreference BaudRate;
private EditTextPreference port;
private EditTextPreference group;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加入preferences的布局文件,这里和普通的布局文件加入方式不一样,注意区别
addPreferencesFromResource(R.layout.preference);
//获得一个共享的preferences,通过该变量来读取配置文件中的各参数值
SharedPreferences sp = getPreferenceManager().getSharedPreferences();
BaudRate = (EditTextPreference) findPreference("set_BaudRate");
BaudRate.setOnPreferenceChangeListener(this);
port = (EditTextPreference) findPreference("set_serialport");
port.setOnPreferenceChangeListener(this);
group = (EditTextPreference) findPreference("set_other");
group.setOnPreferenceChangeListener(this);
//sp的getString方法有两个参数,该方法是获取配置参数的方法,参数一是首选参数,一般在生成都配置文件中,参数二是默认参数,在无法读取参数一的情况下就用参数二
String BaudRateStr = sp.getString("set_BaudRate", getResources().getString(R.string.ip));
BaudRate.setSummary(BaudRateStr);
BaudRate.setText(BaudRateStr);
String portStr = sp.getString("set_serialport", getResources().getString(R.string.p));
port.setSummary(portStr);
port.setText(portStr);
String groupStr = sp.getString("set_other", getResources().getString(R.string.group));
group.setSummary(groupStr);
group.setText(groupStr);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if(preference == BaudRate){
preference.setSummary(newValue.toString());
}
if(preference == port){
preference.setSummary(newValue.toString());
}
if(preference == group){
preference.setSummary(newValue.toString());
}
return true;
}
}
</span>
SetActivity.java文件如下:
<span style="background-color: rgb(255, 255, 255);">public class SetActivity extends Activity {
SharedPreferences preferences;
/* SharedPreferences.Editor editor;*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取只能被本应用程序读、写的SharedPreferences对象
preferences = getSharedPreferences("com.hiden.settest_preferences", MODE_WORLD_READABLE);
Button read = (Button) findViewById(R.id.read);
read.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
Log.d("SP", preferences.getString("set_BaudRate", "none"));
// 读取字符串数据
String BaudRate = preferences.getString("set_BaudRate", null);
String port = preferences.getString("set_serialport", null);
String group = preferences.getString("set_other", null);
String result = "波特率的值为:"+BaudRate+"端口的值为:"+ port+ "其他的值为:"+group;
// 使用Toast提示信息
Toast.makeText(SetActivity.this, result, 5000).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflator = new MenuInflater(this);
// 状态R.menu.context对应的菜单,并添加到menu中
inflator.inflate(R.menu.myset, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
// 选项菜单的菜单项被单击后的回调方法
public boolean onOptionsItemSelected(MenuItem mi)
{
if(mi.isCheckable())
{
mi.setChecked(true); //②
}
// 判断单击的是哪个菜单项,并针对性的作出响应。
switch (mi.getItemId())
{
case R.id.plain_item:
// 创建启动FirstActivity的Intent
Intent intent = new Intent(SetActivity.this
, MyPreferenceActivity.class);
// 启动intent对应的Activity
startActivity(intent);
break;
}
return true;
}
}
</span>
本程序用来启动主界面,点击按钮获取
<span style="background-color: rgb(255, 255, 255);">SharedPreferences 的存储信息。<span style="background-color: rgb(188, 211, 229); font-family: simsun; ">preference.xml代码如下:</span></span>
<span style="background-color: rgb(255, 255, 255);"><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">
<PreferenceCategory
android:title="设置">
<EditTextPreference
android:key="set_BaudRate"
android:title="@string/BaudRate"/>
<EditTextPreference
android:key="set_serialport"
android:numeric="integer"
android:title="@string/serial_interface"
/>
<EditTextPreference
android:key="set_other"
android:title="@string/other"
android:dialogTitle="@string/ht_group"/>
</PreferenceCategory>
</PreferenceScreen> </span>
主界面如下:
利用ActionBar在界面上方添加了设置,点击设置出现下面界面
点击读取按钮,出现以下界面:
这样,存储的数据就可以得到了,源代码可以从这里下载:http://download.csdn.net/detail/liaction/7694989