SharedPreferences

今天练习了利用SharedPreferences保存登录用户名密码;

layout布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"> <EditText
android:id="@+id/et_user"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textSize="15sp"
android:textColor="#FF8F44"
android:background="@drawable/bg_username"
android:hint="用户名"
android:paddingLeft="10dp"
android:paddingRight="10dp"/> <EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textSize="15sp"
android:textColor="#FF8F44"
android:layout_below="@id/et_user"
android:background="@drawable/bg_username"
android:hint="密码"
android:inputType="textPassword"
android:layout_marginTop="15dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"/> <CheckBox
android:id="@+id/cb_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="记住密码"
android:checked="false"
android:layout_below="@+id/et_password"
android:layout_marginLeft="46dp"
android:layout_marginTop="20dp"/> <CheckBox
android:id="@+id/cb_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自动登录"
android:layout_marginLeft="237dp"
android:layout_marginTop="20dp"
android:layout_below="@+id/et_password"/> <Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@id/cb_login"
android:layout_marginTop="20dp"
android:background="@drawable/bg_btn4"
android:text="登录"
android:textSize="20sp"
android:textColor="#fff"/> </RelativeLayout>

activity:

package com.example.helloworld.datastorage;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast; import com.example.helloworld.R; public class SpLoginActivity extends AppCompatActivity { private EditText mEtUser;
private EditText mEtPassword;
private Button mBtnlogin;
private CheckBox mCbremember, mCbautomatic;
private SharedPreferences mSharedPreferences;
private SharedPreferences.Editor mEditor; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sp_login); mEtUser = findViewById(R.id.et_user);
mEtPassword = findViewById(R.id.et_password);
mBtnlogin = findViewById(R.id.btn_login);
mCbremember = findViewById(R.id.cb_pwd);
mCbautomatic = findViewById(R.id.cb_login); //获得mSharedPreferences的实例
mSharedPreferences = getSharedPreferences("logindata", MODE_PRIVATE);
//获取一个Edit对象,所有对数据的操作都需要经过Edit
mEditor = mSharedPreferences.edit();
//从SharedPreferences中取出记住密码的状态值
boolean isremember = mSharedPreferences.getBoolean("isremember", false); //判断状态值
if (isremember) {
//取出账号密码
String names = mSharedPreferences.getString("name", null);
String passs = mSharedPreferences.getString("pass", null);
//设置复选框的状态是勾选的状态
mCbremember.setChecked(true);
mEtUser.setText(names);
mEtPassword.setText(passs);
} //取出自动登录的状态值
boolean isautomatic = mSharedPreferences.getBoolean("isautomatic", false);
if (isautomatic) {
//跳转
Toast.makeText(this, "登陆成功", Toast.LENGTH_LONG).show();
} //对登录按钮添加监听
mBtnlogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//判断记住密码的复选框是否勾选如果勾选就在SharedPreferences中存入账号片密码,状态值
if (mCbremember.isChecked()) {
mEditor.putString("name", mEtUser.getText().toString());//获取EditText里的文本内容
mEditor.putString("password",mEtPassword.getText().toString());
//存入状态值,(代表如果已经勾选了,那么就存一个true,的值)
mEditor.putBoolean("isremember", true);
mEditor.commit();
} //自动登录
if (mCbautomatic.isChecked()) {
//当勾选了自动登录 存一个为true的状态值
mEditor.putBoolean("isautomatic", true);
mEditor.commit();
} //跳转
Toast.makeText(SpLoginActivity.this, "登陆成功", Toast.LENGTH_SHORT).show(); }
});
} }

Android学习10的更多相关文章

  1. android学习10——对顶点着器和片段着色器的理解

    图形都是点,线,面组成的.顶点着器指定了顶点的位置,大小和颜色. 看一个顶点着色器的代码 attribute vec4 a_Position; attribute float a_PointSize; ...

  2. 10、android学习资源整理

    1.github上整理好的开源工程 https://github.com/Trinea/android-open-project 2.最流行的android组件大全 http://colobu.com ...

  3. Android学习系列(10)--App列表之拖拽ListView(上)

     研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨.      鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章. ...

  4. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

  5. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  6. Android学习——第一个NDK程序

    在前面的学习中,我们已经讲解了关于NDK编程的环境搭建流程,简单的使用我们也通过官网本身自带的例子进行说明了.可是相信大家一定还存在这么的一个疑惑:“如果我要自己利用NDK编写一个Android应用, ...

  7. Android学习——windows下搭建Cygwin环境

    在上一篇博文<Android学习——windows下搭建NDK_r9环境>中,我们详细的讲解了在windows下进行Android NDK开发环境的配置,我们也讲到了在NDk r7以后,我 ...

  8. Android学习——windows下搭建NDK_r9环境

    1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个 ...

  9. 【Android学习】《Android开发视频教程》第一季笔记

    视频地址: http://study.163.com/course/courseMain.htm?courseId=207001 课时5    Activity基础概念 1.Android开发技术结构 ...

随机推荐

  1. [USACO09JAN]Total Flow【网络流】

    Farmer John always wants his cows to have enough water and thus has made a map of the N (1 <= N & ...

  2. [CQOI2007] 余数求和 - 整除分块

    \(\sum_{i=1}^n\;k\;mod\;i\) Solution \(\sum_{i=1}^n\;k\;mod\;i\\=\sum_{i=1}^n(k-i\lfloor{\frac{k}{i} ...

  3. gogs迁移至gitlab

    一.先来聊一聊迁移的思路,不管是gogs迁移至gitlab,还是gitlab迁移至gogs,亦或gitlab迁移至gitlab,手动迁移的步骤都是如下图所示(在gitlab上新建一个空项目就会有这样的 ...

  4. 使用PHP链接MySQL

    一.使用PHP查询MySQL数据库: 1.通过PHP来访问MySQL的步骤是: 连接到MySQL 选择操作的数据库 创建查询的字段 执行查询的语句 检索出结果并在网页上显示 断开与MySQL的连接 我 ...

  5. liunx 中设置zookeeper 自启动(service zookeeper does not support chkconfig)

    在liunx 上设置zookeeper 自启动 1.进入目录 cd /etc/init.d 2.创建一个文件 vim zookeeper 3.编辑zookeepr 文件 连接liunx使用的软件是fi ...

  6. [P4550] 收集邮票 - 概率期望,dp

    套路性地倒过来考虑,设\(f[i]\)表示拥有了\(i\)种票子时还需要多少次购买,\(g[i]\)表示还需要多少钱 推\(g[i]\)递推式时注意把代价倒过来(反正总数一定,从顺序第\(1\)张开始 ...

  7. linux下部署Mono oracle配置,oracle客户端安装

    一.Mono,apache安装,配置网站(以 centos 7 +apache 2为例): 安装教程以官网的教程为追,百度来的多少有版本问题. mono官网连接: 1. Mono的安装:https:/ ...

  8. oracle 数据库手动备份和恢复

    一.备份命令: 1.cmd  : exp 2.cmd  :用户名/密码@ip地址/数据库名  如:     yyj/yyj@172.12.5.5/orcl    要导出的数据库 3.回车:输入要输出的 ...

  9. C++-static作用(转)

    C++中static的作用 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用 ...

  10. 基于Java+HttpClient+TestNG的接口自动化测试框架(八)------ 针对文件的处理

    在实际的接口测试中,有时需要根据情况进行文件的上传和下载.在文件数量比较小的时候,我们当然可以直接处理(比如若干个接口都用一个文件).但是,如果我们上传的文件需要使用不同文件夹里不同的文件,而且数量又 ...