Android中SharedPreference实例

来源:互联网 发布:orbitcontrols.js 编辑:程序博客网 时间:2024/06/05 21:52

和Map的操作差不多,多了editor和提交

序列化内存的Map到外存

SharedPreference是Android提供的一种轻量级的数据存储方式,主要用来存储一些简单的配置信息,例如,默认欢迎语,登录用户名和密码等。其以键值对的方式存储,使得我们能很方便进行读取和存入。

     SharedPreference 文件保存在/data/data/<package name>/shared_prefs路径下(如/data/data/com.android.alarmclock/shared_prefs/com.android.text_preferences.xml),通过cat命令可以查看文件,如:


     通过Activity自带的getSharedPreferences方法,可以得到SharedPreferences对象。
     public abstract SharedPreferences getSharedPreferences (String name, int mode);
     name:表示保存后 xml 文件的名称
     mode:表示 xml 文档的操作权限模式(私有,可读,可写),使用0或者MODE_PRIVATE作为默认的操作权限模式。 
     1.数据读取:
     通过SharedPreferences对象的键key可以获取到对应key的键值。对于不同类型的键值有不同的函数:getBoolean,getInt,getFloat,getLong.
     public abstract String getString (String key, String defValue);
     2.数据存入:
    
数据的存入是通过SharedPreferences对象的编辑器对象Editor来实现的。通过编辑器函数设置键值,然后调用commit()提交设置,写入xml文件。

会自动判断是否存在,若存在,则修改,不存在则创建
     public abstract SharedPreferences.Editor edit ();
     public abstract SharedPreferences.Editor putString (String key, String value);
     public abstract boolean commit ();

 

package cn.itcast.preferences;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {    private EditText nameText;    private EditText ageText;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        nameText = (EditText)findViewById(R.id.name);ageText = (EditText)findViewById(R.id.age);        Button button = (Button)this.findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String name = nameText.getText().toString();String age = ageText.getText().toString();//去的SharedPreferences对象 itcast为保存的xml文件名 MODE_WORLD_READABLE 为模式SharedPreferences preferences = getSharedPreferences("itcast", Context.MODE_WORLD_READABLE);//获得编辑器Editor editor = preferences.edit();editor.putString("name", name);editor.putInt("age", new Integer(age));//提交editor.commit();Toast.makeText(MainActivity.this, R.string.success, 1).show();}});                Button resumebutton = (Button)this.findViewById(R.id.resume);        resumebutton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SharedPreferences preferences = getSharedPreferences("itcast", Context.MODE_PRIVATE);String name = preferences.getString("name", "");int age = preferences.getInt("age", 20);nameText.setText(name);ageText.setText(String.valueOf(age));}});    }}

几点说明:

  1. SharedPreferences的获取有两种方法:一是上面提到的通过Activity自带(本质来讲是Context的)的getSharedPreferences方法,可以得到SharedPreferences对象。这种方法的好处是可以指定保存的xml文件名。另一种是通过PreferenceManager.getSharedPreferences(Context)获取SharedPreferences对象。这种方法不能指定保存的xml文件名,文件名使用默认的:<package name>+"_preferences.xml"的形式,不过如果在一个包里面采用这种方式需要保存多个这样的xml文件,可能会乱掉。建议采用第一种指定xml文件名的形式。
  2. 数据的存入必须通过SharedPreferences对象的编辑器对象Editor来实现,存入(put)之后与写入数据库类似一定要commit。
访问别的程序的SharedPreferences
package cn.itcast.other;import android.content.Context;import android.content.SharedPreferences;import android.test.AndroidTestCase;import android.util.Log;public class AccessOtherAppPreferenceTest extends AndroidTestCase {private static final String TAG = "AccessOtherAppPreferenceTest";public void testAccessOtherAppPreference() throws Throwable{//String path = "/data/data/cn.itcast.preferences/shared_prefs/itcast.xml";//File file = new File(path);// SAX来完成xml文件的解析,才能得到参数//构造其他程序的上下文对象Context otherContext = getContext().createPackageContext("cn.itcast.preferences",Context.CONTEXT_IGNORE_SECURITY);SharedPreferences preferences = otherContext.getSharedPreferences("itcast", Context.MODE_PRIVATE);String name = preferences.getString("name", "");int age = preferences.getInt("age", 20);Log.i(TAG, "name="+ name + ",age="+ age);}}




原创粉丝点击