和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() { @Override public 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() { @Override public 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)); } }); } }
几点说明:
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); } }