博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SharerdPreference键的名称限制

Posted on 2013-08-07 09:32  孤骊  阅读(241)  评论(0)    收藏  举报

最近在做一个照相程序,里面有一个照片分辨率设置功能,需要用列表的形式提供照相机支持的照片分辨率,并存储选定分辨率的索引,数据使用SharerdPreference存储的,代码如下:

	// 设置照相机存储分辨率选项索引
	private void setDefaultPictureSize(int index) {
		SharedPreferences spPreferences = getSharedPreferences("Setting", MODE_PRIVATE);
		Editor spEditor = spPreferences.edit();
		spEditor.putInt("photo_picturesize_index", index);
		spEditor.commit();
	}
	private int GetDefaultPictureSize() {
		int index;// 在设备支持的分辨率List中选用的当前分辨率索引号
		SharedPreferences spPreferences = getSharedPreferences("Setting", MODE_PRIVATE);
		index = spPreferences.getInt("photo_picturesize_index", -1);
		if (index == -1) {
			Editor spEditor = spPreferences.edit();
			spEditor.putInt("photo_picturesize_index", 0);
			spEditor.commit();
			index = 0;
		}
		return index;
	}

但在读取的时候总是为默认值-1,百思不得其解,调试过程中忽然想到变量命名长度限制这个问题,是不是键的长度过长?遂将键名改为“p_size”,依然得不到正确值。再次将键名缩减为“photo”,运行结果正确,奇怪,莫不是和键名中的下划线有关?立马改为“photoPicturesizeIndex”,果然得到了正确结果。结论如下,SharedPreference中的键值对的名称中不允许出现“_”,否则无法正确存储数据。

    但是,只知其然,不知其所以然,不知可有达人释疑?