Android app系统设置界面 数据的保存与读取 SharedPreferences 的正确使用

来源:互联网 发布:广州关键词优化 编辑:程序博客网 时间:2024/05/04 07:54

      很开心的是经历过两个多月的努力,项目在11月份即将要交付使用,基础功能已经完成,剩下的是系统设定界面没有开发完毕,如下图:


       很显然要实现的功能是几个界面要显示很多数据,要依据某一项进行排序,当勾选的选项被选中时,菜单切换到该界面时,就要按照这个字段进行排序,所以需求是用户点击的字段,需要保存下来,当用户退出程序,再次进入的时候,需要获得已经保存的字段的值,也就是显示打钩的那项,解决方案如下:

       第一个方案:脑子里第一个冒出来的就是使用sqlite来保存数据,这样每次进入应用的时候,重新从数据库里面获取该字段的值,不过鉴于保存数据不多,都是一些string、int或者boolean类型,用数据库有点大材小用,(关于sqlite的部分有兴趣的同学可以参考别的文章,这里就不多说了)。


      第二个方案:是公司同事(我师傅),他在登陆界面为了记录用户的登陆状态,采用了类似于windows里的注册表的功能来保存登陆状态,Android的系统属性相当于windows的注册表,由key和value组成,且都是核心系统的一个基本机制。相对于windows的注册表,Android的系统属性要简单一些,它没有windows注册表的树状结构,而只是一个列表,也就是说没有父子关系。value有string,int,long,boolean,但是设置只能通过字符串方式。(这是从该博文截取出来的,有兴趣的可以参考:android “注册表”),这个方案其实和第三个方案,功能是类似的,只不过范围更大,介绍第三个方案。

     第三个方案也就是本博文提到的Sharepreferences,这个类实现的功能我的理解是:保存一个应用程序的基本类型变量,保存在该应用的xml文件下(data/data/包名/shared_prefs/),可以双击打开,就可以看到我们保存的变量,具体的sharepreferences的用法我就不多讲了,有很多很好的博文:sharepreferences博文1,其实真的很好用,只要在我的应用中:当用户点击了某一个项,通过监听textview点击事件,更换带钩的背景图片,存下shareperferences的变量,在用户再次登录的时候,然后获取刚才保存的变量,只需要拿到该key,就可以拿到value,分享一个一位前辈提供的sharepreferences的工具类,不用再那么麻烦的创建和保存了,再次感谢:

package client.verbank.mtp.allone.util;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;/** * SharedPreferences操作工具类 *  */public class SharepreferencesUtilSystemSettings {public final static String SETTING = "Setting";public static void putValue(Context context, String key, int value) {Editor sp = context.getSharedPreferences(SETTING, Context.MODE_PRIVATE).edit();sp.putInt(key, value);sp.commit();}public static void putValue(Context context, String key, boolean value) {Editor sp = context.getSharedPreferences(SETTING, Context.MODE_PRIVATE).edit();sp.putBoolean(key, value);sp.commit();}public static void putValue(Context context, String key, String value) {Editor sp = context.getSharedPreferences(SETTING, Context.MODE_PRIVATE).edit();sp.putString(key, value);sp.commit();}public static int getValue(Context context, String key, int defValue) {SharedPreferences sp = context.getSharedPreferences(SETTING,Context.MODE_PRIVATE);int value = sp.getInt(key, defValue);return value;}public static boolean getValue(Context context, String key, boolean defValue) {SharedPreferences sp = context.getSharedPreferences(SETTING,Context.MODE_PRIVATE);boolean value = sp.getBoolean(key, defValue);return value;}public static String getValue(Context context, String key, String defValue) {SharedPreferences sp = context.getSharedPreferences(SETTING,Context.MODE_PRIVATE);String value = sp.getString(key, defValue);return value;}}
        具体我的逻辑代码在上一篇博文有,有问题欢迎交流,谢谢各位!!!

2 0