android13打基础: 保存用户免得下次重新登录逻辑
使用SP来做
- 创建LoginUser.kt
// 登录用户需要Email
data class LoginUser(val email: String,val password: String,
)
- 创建假数据FakeLoginUser.kt
object FakeLoginUser {val fake_login_user_items = arrayListOf(LoginUser(email = "1690544550@qq.com",password = "123",),LoginUser(email = "13266263124@139.com",password = "123",),LoginUser(email = "17876215013@139.com",password = "123",),)
}
- 创建登录退出SP常量
// 提供给登录退出使用的SP常量
object LoginLogoutCons {val is_logged_in: String = "is_logged_in"val email: String = "email"val user_prefs = "user_prefs"
}
- 处理界面逻辑1: 登录
// 持有sp对象private SharedPreferences sharedPreferences;// 再一些初始化和声明周期函数上// 获取SharedPreferences实例sharedPreferences = getActivity().getSharedPreferences(LoginLogoutCons.INSTANCE.getUser_prefs(),Context.MODE_PRIVATE);// 检查是否已经登录if (isLoggedIn()) {// 如果已登录,跳转到主界面,这里是再Fragment做的,所以是getActivity()startActivity(new Intent(getActivity(), ContainerActivity.class));}// 没有的话,处理登录按钮的逻辑,对应处理输入框的逻辑// 。。。省略代码// 跳转登录前,保存状态信息,调用此函数// 保存登录状态private void saveLoginStatus(boolean isLoggedIn, String oneValue) {SharedPreferences.Editor editor = sharedPreferences.edit();editor.putBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), isLoggedIn);// todo: 这个value用来处理登录editor.putString(LoginLogoutCons.INSTANCE.getEmail(), oneValue);editor.apply();}// 使用sharedpreference来处理登录状态private boolean isLoggedIn() {return sharedPreferences.getBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), false);}
- 处理界面逻辑1: 退出
// 持有SP对象private SharedPreferences sharedPreferences;// 在一些生命周期函数// 获取SharedPreferences实例sharedPreferences = getActivity().getSharedPreferences(LoginLogoutCons.INSTANCE.getUser_prefs(), MODE_PRIVATE);// 检查是否已经登录if (!sharedPreferences.getBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), false)) {// 如果未登录,跳转到登录页面startActivity(new Intent(getActivity(), LoginActivity.class));return;}binding.btnLogout.setOnClickListener(v -> {logout();});// 处理退出登录按钮private void logout() {// 清除登录状态和用户信息SharedPreferences.Editor editor = sharedPreferences.edit();editor.putBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), false);editor.putString(LoginLogoutCons.INSTANCE.getEmail(), null);editor.apply();// 跳转到登录页面,并结束当前活动startActivity(new Intent(getActivity(), SplashActivity.class));XToastUtils.toast("退出登录成功");}
记得初始化SP对象
相关文章:
android13打基础: 保存用户免得下次重新登录逻辑
使用SP来做 创建LoginUser.kt // 登录用户需要Email data class LoginUser(val email: String,val password: String, )创建假数据FakeLoginUser.kt object FakeLoginUser {val fake_login_user_items arrayListOf(LoginUser(email "1690544550qq.com",password …...
Linux 4.4 内核源码的目录结构及其主要内容的介绍
以下是 Linux 4.4 内核源码的目录结构及其主要内容的介绍,适用于理解内核模块和驱动开发的基本框架: Linux 4.4 内核源码目录结构 目录作用与内容arch/平台架构相关代码每个子目录对应一种 CPU 架构(如 x86/、arm/、arm64/),包含硬件相关的启动逻辑、中断处理、内存管理等…...
手脑革命:拆解Manus AI如何用“执行智能体”重构生产力——中国团队突破硅谷未竟的技术深水区
第一章:Manus AI 的技术演进与行业背景 1.1 从工具到智能体:AI 技术的范式跃迁 人工智能的发展经历了从规则驱动(Rule-based)到统计学习(Statistical Learning),再到深度学习(Deep…...

Android 调用c++报错 exception of type std::bad_alloc: std::bad_alloc
一、报错信息 terminating with uncaught exception of type std::bad_alloc: std::bad_alloc 查了那部分报错c++代码 szGridSize因为文件太大,初始化溢出了 pEGM->pData = new float[szGridSize]; 解决办法 直接抛出异常,文件太大就失败吧 最后还增加一个日志输出,给…...

匿名GitHub链接使用教程(Anonymous GitHub)2025
Anonymous GitHub 1. 引言2. 准备3. 进入Anonymous GitHub官网4. 用GitHub登录匿名GitHub并授权5. 进入个人中心,然后点击• Anonymize Repo实例化6. 输入你的GitHub链接7. 填写匿名链接的基础信息8. 提交9. 实例化对应匿名GitHub链接10. 进入个人中心管理项目11. 查…...
【0基础跟AI学软考高项】成本管理
💰「成本管理」是什么? 一句话解释:像家庭装修控制预算,既要买得起好材料,又要避免超支吃泡面——成本管理就是精准算钱、合理花钱、动态盯钱,保证项目不破产! 🌋 真实案例…...
模型的原始输出为什么叫 logits
模型的原始输出为什么叫 logits flyfish 一、Logarithm(对数 log) 定义:对数是指数运算的逆运算,表示某个数在某个底数下的指数。 公式:若 b x a b^x a bxa,则 log b ( a ) x \log_b(a) x logb…...

[SAP MM] 查看物料主数据的物料类型
创建物料主数据时,必须为物料分配物料类型,如原材料或半成品 在标准系统中,物料类型ROH(原材料)的所有物料都要从外部采购,而类型为NLAG(非库存物料)的物料则可从外部采购也可在内部生产 ① 特殊物料类型:NLAG 该物料…...
风控模型算法面试题集结
特征处理 1. 特征工程的一般步骤什么?什么是特征迭代 特征工程一般包含: 数据获取,分析数据的可用性(覆盖率,准确率,获取容易程度)数据探索,分析数据业务含义,对特征有一个大致了解,同时进行数据质量校验,包含缺失值、异常值和一致性等;特征处理,包含数据处理和…...

PX4中的DroneCAN的实现库Libuavcan及基础功能示例
简介 Libuavcan是一个用C编写的可移植的跨平台库,对C标准库的依赖小。它可以由几乎任何符合标准的C编译器编译,并且可以在几乎任何体系结构/OS上使用。 在 DroneCAN 中,Libuavcan 有一个 DSDL 编译器,将 DSDL 文件转换为 hpp 头…...

Hot 3D 人体姿态估计 HPE Demo复现过程
视频讲解 Hot 3D 人体姿态估计 HPE Demo复现过程 标题:Hourglass Tokenizer for Efficient Transformer-Based 3D Human Pose Estimation论文地址:https://arxiv.org/abs/2311.12028代码地址:https://github.com/NationalGAILab/HoT 使用con…...

Linux操作系统6- 线程1(线程基础,调用接口,线程优缺点)
上篇文章:Linux操作系统5- 补充知识(可重入函数,volatile关键字,SIGCHLD信号)-CSDN博客 本篇Gitee仓库:myLerningCode/l27 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一.…...
每周一个网络安全相关工具——MetaSpLoit
一、Metasploit简介 Metasploit(MSF)是一款开源渗透测试框架,集成了漏洞利用、Payload生成、后渗透模块等功能,支持多种操作系统和硬件平台。其模块化设计(如exploits、auxiliary、payloads等)使其成为全球…...
MAC-禁止百度网盘自动升级更新
通过终端禁用更新服务(推荐) 此方法直接移除百度网盘的自动更新组件,无需修改系统文件。 步骤: 1.关闭百度网盘后台进程 按下 Command + Space → 输入「活动监视器」→ 搜索 BaiduNetdisk 或 UpdateAgent → 结束相关进程。 2.删除自动更新配置文件 打开终端…...

【C语言】自定义类型:结构体,联合,枚举(上)
前言:在C语言中除了我们经常使用的数据(int,float,double类型)等这些类型以外,还有一种类型就是自定义类型,它包括结构体,联合体,枚举类型。为什么要有这种自定义类型呢?假设我们想描…...

SQLiteStudio:一款免费跨平台的SQLite管理工具
SQLiteStudio 是一款专门用于管理和操作 SQLite 数据库的免费工具。它提供直观的图形化界面,简化了数据库的创建、编辑、查询和维护,适合数据库开发者和数据分析师使用。 功能特性 SQLiteStudio 提供的主要功能包括: 免费开源,可…...
Mysql配置文件My.cnf(my.ini)配置参数说明
一、my.cnf 配置文件路径:/etc/my.cnf,在调整了该文件内容后,需要重启mysql才可生效。 1、主要参数 basedir path # 使用给定目录作为根目录(安装目录)。 datadir path # 从给定目录读取数据库文件。 pid-file filename # 为mysq…...
聊天模型集成指南
文章目录 聊天模型集成指南Anthropic聊天模型集成PaLM2聊天模型PaLM2API的核心功能OpenAl聊天模型集成聊天模型集成指南 随着GPT-4等大语言模型的突破,聊天机器人已经不仅仅是简单的问答工具,它们现在广泛应用于客服、企业咨询、电子商务等多种场景,为用户提供准确、快速的反…...

搭建农产品管理可视化,助力农业智能化
利用图扑 HT 搭建农产品管理可视化平台,实现从生产到销售的全流程监控。平台通过物联网传感器实时采集土壤湿度、温度、光照等数据,支持智慧大棚的灌溉、施肥、病虫害防治等功能。同时,农产品调度中心大屏可展示市场交易数据、库存状态、物流…...
tee命令
tee 是一个在 Unix/Linux 系统中常用的命令,它用于读取标准输入(stdin),并将其内容同时输出到标准输出(stdout)和文件中。它常用于将命令的输出保存到文件的同时,也显示在终端屏幕上。 基本语法…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...