很久以前就接触过sharedPreference这个android中的存储介质。但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来改进这个app中的一个缺陷。   
此前,我先介绍sharedPreference的使用。
Android数据总共有四种存储的方式   
   一、SharePreference
  二、SQLite   
  三、File   
  四、ContentProvider

SharedPreference类是一个轻量级的存储类,特别适合保存软件的配置参数。SharedPreference实际上是生成一个xml文件来存放数据,这个xml文件生成以后的存放位置在“/data/data/<package name>/shared_prefs”目录下。SharedPreference类的使用流程如下:     一、获取SharedPreference类的实例化对象     二、获取Editor对象用于编辑SharedPreference类实例    三、利用Editor添加(修改)数据     四、使用commit()提交事务    

一、获取SharedPreference类的实例化对象     获取SharedPreference类实例化的对象的方法有两种  (1)Context.getSharedPreferences(String name,int mode)       参数解析:       a)name是SharedPreference生成的xml文件的文件名,假设参数name处填写为“firstTest”,那么代码执行后SharedPreference将生成一个firstTest.xml文件。这个xml采用键-值对的形式保存参数。       b) mode是创建模式,是设定SharedPreference的存储的模式,总共有四种参数:          Context.MODE_PRIVATE: 默认的操作模式,代表文件是私有数据,只能被本地应用访问          Context.MODE_APPEND: 检查文件是否存在,存在则往文件中追加内容,否则创建新文件          Context.MODE_WORLD_READABLE:   当前文件可被其他应用程序读取    ·      Context.MODE_WORLD_WRITEABLEs:   当前文件可被其他应用程序写入
  (2)Activity.getPreferences(int mode)     这种方式下,name是通过getLocalClassName()得到的,不能让我们自己设置,而且最终会调到ContextWrapper的getSharedPreferences()          推荐使用第一种方法获取SharedPreference类的实例化对象

二、获取Editor对象       SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。具体实现如下
SharedPreferences sp = ctx.getSharedPreferences("Test", MODE_PRIVATE);  Editor editor = sp.edit();
三+四、利用Editor添加(修改)数据+使用commit()提交事务       Editor中内置了一些常用变量的写入函数(使用键-值对),方便存储数据,存储完数据之后,一定要使用commit()函数提交事务,才能完成数据的存储,具体实现如下:         
editor.putString("STRING_KEY", "string");
editor.putInt("INT_KEY", 0);
editor.putBoolean("BOOLEAN_KEY", true);
editor.commit();
通过SharedPreference类,我们就可以实现【用户引导功能】只在第一次进入app时执行。具体实现如下:
/**
 * 该类是进入app的第一个界面,显示开启app的动画
 * @author LiXuetao
 */
public class startAnimationActivity extends Activity {
    public static final int SKIP_GUIDE = 0x001;
    public static final int SKIP_MAIN = 0x002;
    SharedPreferences sharedPreferences;
    //该线程用于延迟跳转activity
    Thread thread;
    //判断是否第一次打开该应用
    Boolean b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_startanimation);
        /**
         * context.getgetSharedPreferences(String name, int mode) 获取sharedPreference对象
         * name是sharedPreference生成的xml文件的名字
         */
        sharedPreferences = getSharedPreferences("test", Context.MODE_PRIVATE);
        thread = new Thread(runnable);
        thread.start();
    }

    //此handler用于处理界面的变换(跳转activity)
    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case SKIP_GUIDE:
                Intent guideIntent = new Intent(startAnimationActivity.this, guideActivity.class);
                startActivity(guideIntent);
                break;
            case SKIP_MAIN:
                Intent mainIntent = new Intent(startAnimationActivity.this, MainActivity.class);
                startActivity(mainIntent);
                break;
            }
        };
    };

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                //getBoolean(String key, boolean defValue) 获取键isFirst的值,若无此键则获取默认值(第一次打开程序的时候没有isFirst这个键)
                b = sharedPreferences.getBoolean("isFirst", true);
                Message msg = handler.obtainMessage();
                if(b){
                    //Editor对象用于修改sharedpreference对象,修改完后必须提交事务,才能完成修改(参考数据库的事务处理)
                    Editor editor = sharedPreferences.edit();
                    editor.putBoolean("isFirst", false);
                    editor.commit();
                    msg.what = SKIP_GUIDE;
                }else{
                    msg.what = SKIP_MAIN;
                }
                //休眠3s后,将信息发给handler,由handler来跳转activity
                Thread.sleep(3000);
                handler.sendMessage(msg);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
}

/**
 * 该类是app的主界面
 * @author LiXuetao
 *
 */
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

/**
 * 该类是app的引导界面,只在app第一次启动时执行
 * @author LiXuetao
 */
public class guideActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);
    }
}
以上就是app第一次启动时进入guide界面的具体实现代码。  我最开始说的机型大全的APP存在的问题是由于该APP的数据库是外部导入的,所以每次修改数据库都要重新导入数据库,否则就会数据就会按照上个版本的数据库显示。当时我实在想不出办法来,只好在每次开启app的时候只要检测到数据库存在就删了它,然后重新导入app。现在有了sharedPreference,就可以实现只在第一次启动app时删除原先的数据库,导入新的数据库了。   完了,我要去改代码了~~~

android——利用SharedPreference做引导界面的更多相关文章

  1. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  2. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现

    周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...

  3. 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面

    大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...

  4. 【Android】首次进入应用时加载引导界面

    参考文章: [1]http://blog.csdn.net/wsscy2004/article/details/7611529 [2]http://www.androidlearner.net/and ...

  5. SharedPreference 存储小量数据,一般首次启动显示引导界面就用这个。

    写://添加一个SharedPreference并传入数据SharedPreference sharedPreferences = getSharedPreferences("share_d ...

  6. 十八、Android引导界面

    一.所需素材 很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import android ...

  7. Android引导界面

    一.所需素材       很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import a ...

  8. Android 首次进入应用时加载引导界面

    功能需求:首次进入应用时加载引导界面 思路: 1.首次进入,怎么判断?查看SharedPreferences中某个字段 2.基本上每个应用都有个进入实际功能是的动画加载页面,我们可以在该Activit ...

  9. App 引导界面

    App 引导界面 1.前言 最近在学习实现App的引导界面,本篇文章对设计流程及需要注意的地方做一个浅显的总结. 附上项目链接,供和我水平类似的初学者参考——http://files.cnblogs. ...

随机推荐

  1. c/c++常见面试题

    1. C中static有什么作用 (1)隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命 ...

  2. [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  3. 常见电子元器件检测方法。——Arvin

    电子设备中使用着大量各种类型的电子元器件,设备发生故障大多是由于电子元器件失效或损坏引起的.因此怎么正确检测电子元器件就显得尤其重要,这也是电子维修人员必须掌握的技能.我在电器维修中积累了部分常见电子 ...

  4. 网站fail_over测试(障害测试)

    确认Web和DB进行操作: 一:确认web: ①确认进程是否存在: ps aux|grep tomcat ②关闭tomcat: /etc/init.d/catalina_sbi stop ③重启tom ...

  5. Android 的系统架构

    Android 的系统架构 Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所 ...

  6. JavaScript函数劫持

    一.为什么我会写这篇文章 这篇文章其实是在一个偶然的机会下发现了居然有JavaScript劫持这种东西,虽然这种东西在平时用的比较少,而且一般实用价值不高,但是在一些特殊的情况下还是要使用到的,所以在 ...

  7. MySQL查询优化:查询慢原因和解决技巧

    在开发的朋友特别是和mysql有接触的朋友会碰到有时mysql查询很慢,当然我指的是大数据量百万千万级了,不是几十条了,下面我们来看看解决查询慢的办法. MySQL查询优化:查询慢原因和解决方法 会经 ...

  8. 使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误

    使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误 使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误 : ...

  9. 一张图教你搞定Mac App Store 应用安装包存储路径

    还在为找不到App Store 更新应用的安装文件发愁吗?是否有过多个人同时需要更新Xcode,都自己下载一次的痛苦经历? 大家都知道通过苹果服务器下载东西,确实难耐!AppStore 甚至都经常提示 ...

  10. linux内核分析课程笔记(二)

    运行一个精简的操作系统内核 存储程序计算机是几乎所有计算机的基础逻辑框架. 堆栈是计算机中非常基础的东西,在最早计算机没有高级语言时,在高级语言出现之前,我们没有函数的概念.但高级语言出现后有了函数调 ...