Android利用SharedPreferences实现App首次登陆的判断

版权声明:如果需要引用文中内容,希望可以带上相应的链接地址,万分感谢。地址: https://blog.csdn.net/shaowanyunBLOG/article/details/82151109

当下,app的功能越来越多样化,各种各样的新的效果和功能层出不穷,因此,再用户首次进入app时为用户提供一个简单的导航栏也基本上成为了标配。同时我们也可以发现,这些导航栏并不是每一次登录都会进行显示的,那么我们自己应该怎样去实现这样一个首次登陆显示导航栏的效果呢?

这里其实简单分析一下需求,用户首次登录才会显示,再次登录就不再显示,那么显而易见,这里需要对是否首次登录进行一个状态的保存。再确切一点,需要登录状态数据的持久化。

对于安卓的数据持久化,也是有很多种方式,比如说文件方式、sqlite数据库、以及安卓自带的SharedPreferences,或者是全局变量其实都算是数据持久化的一种方式,但是他们的“持久”性能是不一样的,比如说,文件方式,如果文件保存的位置不是安卓默认的.data文件,那么即使app被卸载,那么文件也是不会被删除的,那么当你再次安装app,数据依旧存在,也就是说再次安装app时,第一次登录app导航栏时不会出现的,那么这样的话,就“过了”是跟我们的需求背道而驰的。如果是定义一个全局变量呢,在app本次运行时可以保存有效,一旦我退出app,那么数据就会重新被初始化,可见,这种方式又“不及”,那么结论就是应该寻找一种方式,既能够保证app退出时能够保存,又能够在app被卸载时初始化数据的方式,那么确定了需求,那么显然,只剩下数据库和SharedPreferneces两种方式可以胜任,那么这二者之中又该怎么取舍呢?那肯定是选择轻便好用简单到无可救药的SharedPreferences啊~

简单介绍一下SharedPreferences(以下简称SP),它是安卓提供的一个轻量级的存储类,存储方式是“键值对”类型,这个应该大家都是了解的,我也不必多说。

简单介绍一下使用:

存,我习惯记三句话:

SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("Name","value");
editor.commit();

取,我习惯记两句话:

SharedPreferences sp = getSharedPreferences("data",MODE_PRIVATE);
String data= sp.getString("Name","");

那么其实这些东西都是大家都知道的,那么下面就具体说一下实现首次登录显示导航栏的功能吧。

那么我们需要准备的就是一个带有导航栏功能的app,这个因为本篇文不是讲导航栏的制作的,所以这个要大家自己准备一下,比如果我这里假定有一个导航界面:NavigationActivity里面可以滑动然后进行导航。

接下来的主要是在OnCreate方法里面做操作的,这里还是要分析一下的,首先重app来说,代码一旦写死,那么在运行时没可能会改变的,那么也就是说,不管是显示导航栏界面还是不显示导航栏界面,都是走的同样的代码文件的,那么不可能说改变配置文件里面定义的主界面,这个是了解的,但是二次登陆不能够看到导航栏界面该怎么办呢?很简单,二次登陆不让NavigationActivity的布局显示出来就直接跳到下一个界面,也就是在初始化时就直接跳走。所以要操作的就是onCreate方法了:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_navigation);

    SharedPreferences sp = getSharedPreferences("Flag",MODE_PRIVATE);
    String firstlogin = sp.getString("firstlogin","");
    if(null!=firstlogin && firstlogin.equals("true")){
        Intent intent = new Intent(NavigationActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }else{
        imgbtn_enter = (ImageButton) findViewById(R.id.imgbtn_enter);
        imgbtn_enter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("Flag",MODE_PRIVATE).edit();
                editor.putString("firstlogin","true");
                editor.commit();
                Intent intent = new Intent(NavigationActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}

上面就是我的代码的实际截取部分,然后重点在于在onCreate方法先获取SP,进行判断是否是首次登陆,如果不是,那么就正常显示导航栏,然后在离开本界面时,将标志位进行置位,然后当用户下次登录的时候,就会走上面的判断语句,firstlogin = true,然后直接跳转到MainActivty了。当app被删掉之后,因为SP是一个本地的并且数据文件默认在安卓的.data文件夹中,所以也会被删掉,当用户再次安装app时,还是会像第一次安装app时那样,首次登陆显示导航栏,那么这样的话,功能就做好了。

这里其实我是觉得存在选择的,比如说有的人觉得,只要进来导航栏界面了,哪怕是刚进来,没有到正常的结束导航,用户突然按下home键回到桌面,然后清掉所有的后台程序,那么再点击这里也应该按照二次登陆去处理的,但是我这里是在用户完成导航之后再进行置位,那可能有朋友有疑问了,那如果我每次都不导航结束就直接杀掉程序,那不是每次都会重新看导航栏么,是的,所以,我其实也想过这回事,所以,我就使用了之前写过的文章里面的重写系统返回键的方法,具体如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
   //这个地方写重写的返回键要做的逻辑
    }
    return true;
}

是的,我重写了系统返回键事件,然后里面什么都不做,也就是说,用户点击返回键是没有效果的,但是那如果说点击home键退回桌面也可以强杀app呢,是的,那么也可以再重写一下home键的事件啊~

这里怎么做其实还是看取舍,我这里做重写系统按键事件,只是为了说明,你想怎么去设计都可以,就是尽可能保证大家对问题的思考的可能性,我为什么非要用户看完我的导航栏,其实我是因为自认为导航栏做的还可以,所以才强求用户必须看完的,要不然就白白浪费了我的设计了。。。。

不过具体的首次登陆的功能实现起来还是比较简单的,大家也可以抽空试一下。

猜你喜欢

转载自blog.csdn.net/shaowanyunBLOG/article/details/82151109
今日推荐