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文件。
MyPreferenceActivity.java文件如下:本文件主要用来设置界面并存储参数值
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; } }
SetActivity.java文件如下:
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; } }
本程序用来启动主界面,点击按钮获取
SharedPreferences 的存储信息。<span style="background-color: rgb(188, 211, 229); font-family: simsun; ">preference.xml代码如下:</span>
<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>
主界面如下:
利用ActionBar在界面上方添加了设置,点击设置出现下面界面
点击读取按钮,出现以下界面:
这样,存储的数据就可以得到了,源代码可以从这里下载:http://download.csdn.net/detail/liaction/7694989
SharedPreferences存储获取信息例子