Android之SharedPreferences存储数据实现自动登录以及退出登录

Android之SharedPreferences存储数据实现自动登录以及退出登录,第1张

概述使用SharedPreferences存储登录信息SharedPreferences是android存储数据的方式之一,适合用于存储少量的数据,常用于存储配置信息,如登录信息。存数据publicstaticintMODE=Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;······SharedPreferences 使用SharedPreferences存储登录信息

SharedPreferences是androID存储数据的方式之一,适合用于存储少量的数据,常用于存储配置信息,如登录信息。

存数据

public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;······SharedPreferences sp = getSharedPreferences("userInfo", MODE);SharedPreferences.Editor editor = sp.edit();editor.putString("USER_name", name).commit();editor.putString("ID", String.valueOf(ID)).commit();

取数据

SharedPreferences preferences = getSharedPreferences("userInfo", Activity.MODE_PRIVATE);String username= preferences.getString("USER_name", "");String ID= preferences.getString("ID", "");

创建一个userinfo的实体类。

public class UserInfo {    private String username;    private String ID;    public String getID() {        return ID;    }    public voID setID(String ID) {        this.ID = ID;    }    public String getUsername() {        return username;    }    public voID setUsername(String username) {        this.username = username;    }}

然后创建UserManage 保存用户信息的管理类。

import androID.content.Context;import androID.content.SharedPreferences;import androID.text.TextUtils;import androID.util.Log;public class UserManage {    private static UserManage instance;    private UserManage() {    }    public static UserManage getInstance() {        if (instance == null) {            instance = new UserManage();        }        return instance;    }    /**     * 保存自动登录的用户信息     */    public voID saveUserInfo(Context context, String username, String password) {        SharedPreferences sp = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);//Context.MODE_PRIVATE表示SharePrefences的数据只有自己应用程序能访问。        SharedPreferences.Editor editor = sp.edit();        editor.putString("USER_name", username);//     edit.putString("键名","值");        editor.putString("ID", ID);        // editor.commit();        editor.apply();    }    public static String takename(Context context){        SharedPreferences sharedPreferences=context.getSharedPreferences("usesrInfo",0);        String  name=sharedPreferences.getString("USER_name",null);        return name;    }    /**     * 获取用户信息model     *     * @param context     * @param     * @param     */    public UserInfo getUserInfo(Context context) {        SharedPreferences sp = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);        UserInfo userInfo = new UserInfo();        userInfo.setUsername(sp.getString("USER_name", ""));        userInfo.setID(sp.getString("ID", ""));        return userInfo;    }    /**     * userInfo中是否有数据     */    public boolean hasUserInfo(Context context) {        UserInfo userInfo = getUserInfo(context);        if (userInfo != null) {            if ((!TextUtils.isEmpty(userInfo.getUsername())) && (!TextUtils.isEmpty(userInfo.getID()))) {//有数据                return true;            } else {                return false;            }        }        return false;    }    public static voID clear(Context context) {        SharedPreferences preferences = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);        SharedPreferences.Editor editor = preferences.edit();        editor.clear();        editor.commit();    }}

如果登录成功存储用户登录的用户名和从数据库中获取的ID,因为在后面的数据库 *** 作 *** 作需要经常用到这2个数据,如果后面用户 *** 作过程中修改了用户名可以调用SharePrefences存储数据方法再存储一下,存储的数据会替换。
判断SharedPreferences 中是否存储有数据,在用户第二次进入APP时,判断如果有数据就跳转到APP首页,如果没有存储数据就跳转登录页。我是在MainActivity.java中判断。

//自动登录判断,SharePrefences中有数据,则跳转到主页,没数据则跳转到登录页if (UserManage.getInstance().hasUserInfo(this))        {            //有数据跳转首页        } else {           //无数据跳转登录页        }

退出登录 *** 作,
创建ActivityCollector类

//管理所有的活动,这个是对于用户退出登录public class ActivityCollector {    public static List<Activity> activityList=new ArrayList<>();    public static voID addActivity(Activity activity){        activityList.add(activity);    }    public static voID remove(Activity activity){        activityList.remove(activity);    }    public static voID finishAll(){        for (Activity activity:activityList){            if (!activity.isFinishing()){  //判断activity是否销毁                activity.finish();   //销毁activity            }        }    }}

创建BaseActivity.java父类

public class BaseActivity  extends AppCompatActivity {    private MyForceExitReceiver receiver;  //声明一个自己的广播接收者内部类    private MyBaseActiviy_broad oBaseActiviy_broad;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ActivityCollector.addActivity(this);    }    //定义一个广播    public class MyBaseActiviy_broad extends broadcastReceiver {        public voID onReceive(Context arg0, Intent intent) {//接收发送过来的广播内容            int closeAll = intent.getIntExtra("closeAll", 0);            if (closeAll == 1) {                finish();//销毁BaseActivity            }        }    }    /**     * 在activity处于返回栈顶,即处于焦点时,注册一个广播接收者     */    public voID onResume(){        super.onResume();        IntentFilter intentFilter=new IntentFilter();  //实例化一个intent过滤器        intentFilter.addAction("com.yuanlp.exit.FORCEXIT");  //只关心自己想要的广播        receiver=new MyForceExitReceiver();        registerReceiver(receiver,intentFilter);  //动态注册广播    }    public voID onPause(){  //当当前activity被d出框占用时,解除注册        super.onPause();        if (receiver!=null){            unregisterReceiver(receiver);            receiver=null;        }    }    public voID onDestroy(){        super.onDestroy();        ActivityCollector.remove(this);    }    /**     * 一个广播接收者,接收到广播后,d出框提示用户退出登录,     */    private class MyForceExitReceiver extends broadcastReceiver {        @OverrIDe        public voID onReceive(final Context context, final Intent intent) {            AlertDialog.Builder builder=new AlertDialog.Builder(context);            builder.setTitle("提示");            builder.setMessage("确定要退出登录?");            builder.setCancelable(false);             builder.setPositivebutton("OK", new DialogInterface.OnClickListener() {                @OverrIDe                public voID onClick(DialogInterface dialog, int which) {                    ActivityCollector.finishAll();   //销毁所有活动                    Intent intent=new Intent(context,LoginActivity.class); //跳转至登录界面                    context.startActivity(intent);                }            });             builder.setNegativebutton(getResources().getString(R.string.tips_limit_false), new DialogInterface.OnClickListener() {                @OverrIDe                public voID onClick(DialogInterface dialogInterface, int i) {		//取消按钮                }            });            builder.setCancelable(true);            builder.show();        }    }}

退出登录界面,activity_set_user.xml文件就一个退出登录按钮,在这里代码省略。

public class SetUserActivity extends BaseActivity {    private TextVIEw tvCancel;        @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_set_user);        tvCancel = findVIEwByID(R.ID.tvCancel);       //退出登录按钮点击事件        tvCancel.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw vIEw) {                UserManage.clear(SetUserActivity.this);                Intent intent = new Intent("com.exit.FORCEXIT");                sendbroadcast(intent);  //发送广播            }        });    }}
总结

以上是内存溢出为你收集整理的Android之SharedPreferences存储数据实现自动登录以及退出登录全部内容,希望文章能够帮你解决Android之SharedPreferences存储数据实现自动登录以及退出登录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1063779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存