SharedPreferences存储获取信息例子
阅读原文时间:2021年04月20日阅读:1

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