最近在做一个照相程序,里面有一个照片分辨率设置功能,需要用列表的形式提供照相机支持的照片分辨率,并存储选定分辨率的索引,数据使用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中的键值对的名称中不允许出现“_”,否则无法正确存储数据。
但是,只知其然,不知其所以然,不知可有达人释疑?
浙公网安备 33010602011771号