Android的数据存储之一------SharedPreferences

下面将介绍下Android的数据存储,Android提供了5种方式存储数据:
1.SharedPreferences存储数据; 
2.文件存储数据;
3.SQLite数据库存储数据;
4.使用ContentProvider存储数据;
5. 网络存储数据;


今天我先介绍下最简单的SharedPreferences存储数据;

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存,它是什么样的处理方式呢?

  SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android最 终是以xml方式来保存(在Android系统中,这些信息以XML文件的形式保存在/data/data/PACKAGE_NAME /shared_prefs 目录下。),整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。


用于访问和修改getSharedPreferences(String, int)返回的preference data的一个接口。对于任何一组特殊的preferences,所有的客户端共享一个此类单独的实例。

修改Preferences必须通过一个SharedPreferences.Editor对象,以确保当他们提交存储数据的操作时,preference值保持一致的状态。

注意:

1》当前此类不支持多线程访问。

2》使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。


SharedPreferences的步骤:

1.Call edit() to get a SharedPreferences.Editor.
2.Add values with methods such as putBoolean() and putString().
3.Commit the new values with commit()


上代码:

public class SharedPreferencesActivity extends Activity
{
	private final static String SETTING = "potato";
	private Button mBtnSave;
	private Button mBtnShow;
	private EditText mEditViewName;
	private EditText mEditViewAge;
	private TextView mTextViewResult;
	 /** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		mBtnSave = (Button) findViewById(R.id.btnSave);
		mBtnShow = (Button) findViewById(R.id.btnShow);
		mEditViewName = (EditText) findViewById(R.id.editName);
		mEditViewAge = (EditText) findViewById(R.id.editAge);
		mTextViewResult = (TextView)findViewById(R.id.txtResult);
		mBtnSave.setOnClickListener(listener);
		mBtnShow.setOnClickListener(listener);
	}

	/**
	 * 事件监听器
	 */
	private OnClickListener listener = new OnClickListener()
	{
		@Override
		public void onClick(View v)
		{
			SharedPreferences pres = SharedPreferencesActivity.this.                          // 注1
										getSharedPreferences(SETTING, Context.MODE_PRIVATE);
			switch (v.getId())
			{
			// 保存数据
			case R.id.btnSave:
				Editor editor = pres.edit();                                                    // 注2
				editor.putString("name", mEditViewName.getText().toString());
				editor.putInt("age", Integer.valueOf(mEditViewAge.getText().toString()));
				editor.commit();
				Toast.makeText(SharedPreferencesActivity.this, "保存成功", Toast.LENGTH_LONG).show();
				break;
			// 显示数据	
			case R.id.btnShow:
				String name = pres.getString("name", "NO");                                      // 注3
				int age = pres.getInt("age", 0);
				String bir = pres.getString("bir", "NO");
				mTextViewResult.setText("Name="+name+";age="+age+";bir="+bir);
				break;
			}
		}
	};
}

注1:

SharedPreferences pres = SharedPreferencesActivity.this.                          // 注1
						getSharedPreferences(SETTING, Context.MODE_PRIVATE);
 通过名称,得到一个SharedPreferences,顾名思义,这个Preferences是共享的,共享的范围据现在同一个Package中,这里 面说所的Package和Java里面的那个Package不同,貌似这里面的Package是指在AndroidManifest.xml文件中的Package属性值。

第二参数:

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。


注2:

注3:

存储和取值的过程这有点像HashMap但是比HashMap更具人性化,getXXX(Object key,Object defualtReturnValue),

第二个参数是当你所要的key对应没有时候返回的值(所谓的默认值)。这就省去了很多逻辑判断。。。。

editor.commit();这个一定要调用,因为这样才能提交修改的内容,否则如果赋值过程中数据类型错误,抛出异常,那就数据就不保存了,但是有了commit(),就不会出现这样问题。。。。


有问题请留言。。。。。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值