一、简介

一个小案例,将用户输入的用户名和密码保存成txt格式文件,下次打开的时候从本地缓存中读取。使用的是字符流保存。用的是明文存储账号密码,在真实商业应用中是不会这样做的,这个案例只是为了介绍字符流如何操作。

二、案例实现(代码如下)

1.搭建UI

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><EditTextandroid:id="@+id/et_username"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:ems="10"android:hint="请输入用户名"android:inputType="textPersonName"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.497"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><EditTextandroid:id="@+id/et_password"android:layout_width="0dp"android:layout_height="wrap_content"android:ems="10"android:inputType="textPassword"android:hint="请输入密码"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/et_username" /><CheckBoxandroid:id="@+id/checkBox"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:text="记住密码"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/et_password" /><Buttonandroid:id="@+id/bt_login"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="10dp"android:layout_marginLeft="10dp"android:layout_marginTop="12dp"android:layout_marginEnd="10dp"android:layout_marginRight="10dp"android:text="安全登录"android:onClick="OnClickButton"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toEndOf="@+id/checkBox"app:layout_constraintTop_toBottomOf="@+id/et_password" />
</androidx.constraintlayout.widget.ConstraintLayout>

2.业务逻辑

package com.hiscene.test03;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;public class MainActivity extends AppCompatActivity {private EditText et_username;private EditText et_password;private CheckBox checkBox;private final String usertxtname="user.txt";private File fileDir;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.login);fileDir=MainActivity.this.getFilesDir();et_username=findViewById(R.id.et_username);et_password=findViewById(R.id.et_password);checkBox=findViewById(R.id.checkBox);LoadCacheUserInfo();}//按钮点击事件public void OnClickButton(View view){if (view.getId() == R.id.bt_login) {String userName = et_username.getText().toString().trim();String password = et_password.getText().toString().trim();Login(userName, password);}}//登录private void Login(String userName,String password) {if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(password)) {Toast.makeText(MainActivity.this, "用户名和密码不能为空!", Toast.LENGTH_LONG).show();} else {//链接服务器进行登录验证Todo....if (checkBox.isChecked()) SaveUserInfo(userName, password);}}//保存用户信息private void SaveUserInfo(String userName,String password) {File file = new File(fileDir,usertxtname);try {OutputStream out = new FileOutputStream(file);OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");BufferedWriter writer = new BufferedWriter(osw);writer.write(userName + "#" + password);writer.flush();writer.close();} catch (Exception e) {e.printStackTrace();}}//获取缓存中的用户数据private void LoadCacheUserInfo(){File file = new File(fileDir,usertxtname);if (!file.exists())return;try {FileReader reader =new FileReader(file);BufferedReader br=new BufferedReader(reader);String text=br.readLine();String[] arr=text.split("#");et_username.setText(arr[0]);et_password.setText(arr[1]);checkBox.setChecked(true);br.close();}catch (Exception e){e.printStackTrace();}}
}

源码下载:链接:https://pan.baidu.com/s/1ncgNCem4OnL8ixWQ_4VWSA  密码:c05e

Android实现简单的保存密码功能相关推荐

  1. php js记住密码功能,jquery.cookie.js实现用户登录保存密码功能的方法_jquery

    本文实例讲述了jquery.cookie.js实现用户登录保存密码功能的方法.分享给大家供大家参考,具体如下: 需要导入的js有jquery.js和jquery.cookie.js 在页面加载时首先尝 ...

  2. android实现打电话功能,Android之简单实现拨打电话功能的方法

    手机在我们的日常生活中是最常见的,它的功能是拨打电话和发送短信,那么在Android开发中,我们如何通过该程序拨打电话呢?爱站技术频道给出了Android之简单实现拨打电话功能的方法,一起来看看吧! ...

  3. 修改注册表禁用edge浏览器保存密码功能

    打开注册表\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge目录,创建Dword(32位)数值,名称PasswordManagerEnabled, ...

  4. android如何实现用户注册功能,Android 实现简单的登录注册功能(SharedPreferences和SQLite)...

    最近恰好作了一个Android的登陆注册界面,将数据利用SharedPreferences或者SQLite绑定到Android程序中,实现简单的登录注册功能,本文未涉及到与服务器的交流.java 首先 ...

  5. Android 实现简单的登陆注册功能(SharedPreferences和SQLite)

    最近刚好做了一个Android的登录注册界面,将数据利用SharedPreferences或者SQLite绑定到Android程序中,实现简单的登陆注册功能,本文未涉及到与服务器的交流. 首先,对于登 ...

  6. Android 实现简单的锁屏功能

    写正题之前先闲扯几句.因为前段时间自己的手机电源键不灵,所以手机不能及时锁屏,一度让我很苦恼,后来通过在系统设置找到一个另类的方法,设置让音量键锁屏,最终也解决了问题,但是觉得还是不够爽,作为程序员, ...

  7. Android实现简单的进度条功能

    实现进度条首先就要知道[AsyncTask],异步任务类 这里推荐这个大佬写的文章,写的很不错 详解Android中AsyncTask的使用 1.xml布局 声明一个显示,两个按钮,一个进度条 < ...

  8. Android打电话功能权限报错,Android实现简单的拨号器功能

    简易拨号器的制作方法,具体如下 一.布局构造 android:layout_width="match_parent" android:layout_height="mat ...

  9. SharedPreferences实现记住密码功能

    aredPerferences 简单介绍 用于保存简单的键值对数据: 它将数据放在 /data/data/<package name>/shared_prefs目录下,用xml文件保存MA ...

最新文章

  1. 目标识别的选择性搜索
  2. 在ASP.NET中实现Url Rewriting
  3. 给Ocelot做一个Docker 镜像
  4. wordpress 拾遗
  5. python怎么处理文字_使用python进行简单的文本处理
  6. 1321. Robot
  7. Linux常用命令4(grep、df、du、awk、su、ll)
  8. TensorFlow神经网络:模块化的神经网络八股
  9. Ext 中使用Ajax
  10. 读取android项目assets目录下的txt文件.
  11. matlab实现马尔可夫链,马尔可夫链matlab源码
  12. FPGA / IC 设计(一)
  13. vue 移动端进入页面自动弹出软键盘
  14. Cobbler自动部署CentOS系统
  15. typescript全局安装卸载以及npm相关问题
  16. go之官方依赖管理工具dep安装和使用
  17. Python错误日志
  18. 系统渗透与防护——网络安全
  19. RC复位电路上二极管的作用
  20. 【学习】从零开发的Android音视频开发(13)——MediaCodec到OMX框架过程及其硬解码

热门文章

  1. 最实用的vue刷新当前页面,provide / inject 组合 方式实现vue页面刷新
  2. 施一公:我直到博士毕业,对研究也没兴趣!很迷茫,不知道将来干什么...
  3. 云服务器配置jupyter
  4. 【厦门大学】考研初试复试资料分享
  5. 2020年电工(初级)新版试题及电工(初级)模拟考试题库
  6. 智能门锁--配置硬件
  7. Python:随机生成多个两位数加减混合运算计算式
  8. 【基础篇】java的多态到底是什么?(详细案例逐步分析)
  9. eclipse内存设置Linux,Eclipse CDT Linux下内存分析 补记
  10. 西门子200smart型PLC通过485modbus通讯控制台达VDF—M型变频器程序