源码【工程文件】:https://gitee.com/lwx001/saveQQ

MainActivity.java:

package cn.lwx.saveqq;import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import java.util.Map;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private EditText etNumber;private EditText etPassword;private Button btnLogin;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1、初始化界面initView();//2、如果用户保存了信息,进行数据的回显Map<String, String> userInfo = FileSaveQQ.getUserInfo(this);//工具类if (userInfo != null) {etNumber.setText(userInfo.get("number"));etPassword.setText(userInfo.get("password"));}}private void initView() {//1、完成控件的初始化etNumber = (EditText) findViewById(R.id.et_number);etPassword = (EditText) findViewById(R.id.et_password);btnLogin = (Button) findViewById(R.id.btn_login);//2、设置按钮的点击事件btnLogin.setOnClickListener(this); //当前类 implements View.OnClickListener}@Overridepublic void onClick(View v) {//1、当单击“登录”按钮时,获取QQ账号和密码String number = etNumber.getText().toString().trim();String password = etPassword.getText().toString();//2、检验账号和密码是否正确(是否为空)if (TextUtils.isEmpty(number)) {Toast.makeText(this, "请输入QQ账号!", Toast.LENGTH_SHORT).show();return;}if (TextUtils.isEmpty(password)) {Toast.makeText(this, "请输入密码!", Toast.LENGTH_SHORT).show();return;}//登录成功Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show();//3、保存用户信息boolean isSaveSuccess = FileSaveQQ.saveUserInfo(this, number, password);if (isSaveSuccess) {Toast.makeText(this, "保存成功!", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "保存失败!", Toast.LENGTH_SHORT).show();}}
}

FileSaveQQ.java:

package cn.lwx.saveqq;import android.content.Context;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;public class FileSaveQQ { //工具类、保存账号、密码信息//保存QQ账号和登录密码到data.txt文件中//静态方法,通过类可直接调用。Context上下文public static boolean saveUserInfo(Context context, String number, String password) {try {//1、通过上下文获取文件输出流FileOutputStream fos = context.openFileOutput("data.txt",Context.MODE_PRIVATE);//保存信息到文件中。获取文件输出流。文件名、模式//2、把数据写到文件中fos.write((number + ":" + password).getBytes());//转化为字节数组fos.close();//关闭流return true;} catch (Exception e) {e.printStackTrace();return false;}}//从data.txt文件中获取存储的QQ账号和密码信息public static Map<String, String> getUserInfo(Context context) {String content = "";try {FileInputStream fis = context.openFileInput("data.txt");//得到文件输入流byte[] buffer = new byte[fis.available()];//读取数据。缓冲区大小[fis.available()]fis.read(buffer);//把数据读到缓冲区中content = new String(buffer);Map<String, String> userMap = new HashMap<String, String>();String[] infos = content.split(":");userMap.put("number", infos[0]);userMap.put("password", infos[1]);fis.close();return userMap;} catch (Exception e) {e.printStackTrace();return null;}}
}

activity_main.xml:

<?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:background="#E6E6E6"android:orientation="vertical"><ImageViewandroid:id="@+id/iv"android:layout_width="70dp"android:layout_height="70dp"android:layout_centerHorizontal="true"android:layout_marginTop="40dp"android:background="@drawable/head" /><LinearLayoutandroid:id="@+id/ll_number"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/iv"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:layout_marginTop="15dp"android:layout_marginRight="10dp"android:layout_marginBottom="5dp"android:background="#ffffff"><TextViewandroid:id="@+id/tv_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="账号:"android:textColor="#000"android:textSize="20sp" /><EditTextandroid:id="@+id/et_number"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@null"android:padding="10dp" /></LinearLayout><LinearLayoutandroid:id="@+id/ll_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/ll_number"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="#ffffff"><TextViewandroid:id="@+id/tv_password"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="密码:"android:textColor="#000"android:textSize="20sp" /><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_toRightOf="@id/tv_password"android:background="@null"android:inputType="textPassword"android:padding="10dp" /></LinearLayout><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/ll_password"android:layout_marginLeft="10dp"android:layout_marginTop="50dp"android:layout_marginRight="10dp"android:background="#3C8DC4"android:text="登录"android:textColor="#ffffff"android:textSize="20sp" />
</RelativeLayout>

运行截图:

SharedPreferences :

SPSaveQQ.java :

package cn.lwx.saveqq;import android.content.Context;
import android.content.SharedPreferences;import java.util.HashMap;
import java.util.Map;public class SPSaveQQ {// 保存QQ账号和登录密码到data.xml文件中public static boolean saveUserInfo(Context context, String number, String password) {//得到SharedPreferences实例 / Context上下文 / Context.MODE_PRIVATE私有模式SharedPreferences sp = context.getSharedPreferences("data", Context.MODE_PRIVATE);SharedPreferences.Editor edit = sp.edit();//得到编辑器edit.putString("userName", number);//存储数据edit.putString("pwd", password);//存储数据edit.commit();//提交return true;}//读取操作 / 从data.xml文件中获取存储的QQ账号和密码public static Map<String, String> getUserInfo(Context context) {SharedPreferences sp = context.getSharedPreferences("data", Context.MODE_PRIVATE);String number = sp.getString("userName", null);//找不到数据,返回空String password = sp.getString("pwd", null);Map<String, String> userMap = new HashMap<String, String>();//存储数据userMap.put("number", number);userMap.put("password", password);return userMap;}}

更改 MainActivity.java 文件 :

package cn.lwx.saveqq;import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import java.util.Map;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private EditText etNumber;private EditText etPassword;private Button btnLogin;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1、初始化界面initView();//2、如果用户保存了信息,进行数据的回显//Map<String, String> userInfo = FileSaveQQ.getUserInfo(this);//工具类Map<String, String> userInfo = SPSaveQQ.getUserInfo(this);if (userInfo != null) {etNumber.setText(userInfo.get("number"));etPassword.setText(userInfo.get("password"));}}private void initView() {//1、完成控件的初始化etNumber = (EditText) findViewById(R.id.et_number);etPassword = (EditText) findViewById(R.id.et_password);btnLogin = (Button) findViewById(R.id.btn_login);//2、设置按钮的点击事件btnLogin.setOnClickListener(this); //当前类 implements View.OnClickListener}@Overridepublic void onClick(View v) {//1、当单击“登录”按钮时,获取QQ账号和密码String number = etNumber.getText().toString().trim();String password = etPassword.getText().toString();//2、检验账号和密码是否正确(是否为空)if (TextUtils.isEmpty(number)) {Toast.makeText(this, "请输入QQ账号!", Toast.LENGTH_SHORT).show();return;}if (TextUtils.isEmpty(password)) {Toast.makeText(this, "请输入密码!", Toast.LENGTH_SHORT).show();return;}//登录成功Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show();//3、保存用户信息//boolean isSaveSuccess = FileSaveQQ.saveUserInfo(this, number, password);boolean isSaveSuccess = SPSaveQQ.saveUserInfo(this, number, password);if (isSaveSuccess) {Toast.makeText(this, "保存成功!", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "保存失败!", Toast.LENGTH_SHORT).show();}}
}

查看数据:


前情提要1 :静态页面-简易QQ登录页面
(纯activity_main.xml页面)

【https://blog.csdn.net/weixin_44949135/article/details/104504728】

前情提要2 :动态页面-简单保存QQ密码
(数据存储:文件存储、SharedPreferences)

【https://blog.csdn.net/weixin_44949135/article/details/104965413】

验证QQ密码 ,在前情提要2的基础上,实现了如下功能:
【https://blog.csdn.net/weixin_44949135/article/details/106001065】
如果账号存在,且密码正确,在app页面上,显示 “ 账号存在!密码正确!登陆成功!” 的 文本提示;
如果账号存在,但密码不正确,在app页面上,显示 “ 账号存在!密码错误!登陆失败!” 的 文本提示;
如果账号不存在,且密码不为空,则注册账号(保存用户名与密码)。

局限性 :

只能 存储 一个 账号的信息(账号、密码)。

如果在 “ 账号不存在 and 密码不为空 ” 的情况下,点击 “ 登录 ” 按钮,

将自动注册账号,保存账号信息(账号、密码),原账号信息 将被 新账号信息 替代。

转发请附上原文链接。点个赞再走啊~ 谢谢~

Android 保存QQ密码(数据存储:文件存储、SharedPreferences)相关推荐

  1. Android数据存储-文件存储-内部存储

    所有的Android设备都有两个文件存储区域:内部存储和外部存储.内部存储都是指手机内部(这并不是说外部存储就是指的手机的外部SD卡之类的,外部存储物理上来说也有可能是在手机内部). 内部存储中的文件 ...

  2. Android Native APP开发笔记:文件存储与访问

    文章目录 目的 基础说明 应用专属存储空间 共享存储 其它 总结 目的 APP开发与使用过程中免不了和文件打交道,对于Windows或Linux而言文件的存储与访问操作都很方便,直接通过文件系统路径和 ...

  3. 用户名+密码控制+php文件存储

    用户名+密码控制+php文件存储 <?php $posi = strrpos($_SERVER['PHP_SELF'],"/"); # $script_name = subs ...

  4. Android开发保存QQ密码

    Android开发保存QQ密码 技术要点: 使用文件储存的方式保存数据 实现步骤 ①用户交互界面的设计与实现 ②工具类(FileSaveQQjava )的设计与实现 ③界面逻辑代码的设计与实现 页面布 ...

  5. 云视通手机下载的文件存储位置_2020年新版手机QQ和微信接受文件存储在手机哪个文件夹...

    2020年手机QQ和微信的更新非常快,不仅成为了我们的聊天工具,也成为了很多人的文 件收发工具,我们通过QQ或者微信,基本可以实现文字视频等聊天,重要文件相互收发 传递等工作.但近期手机QQ的更新,改 ...

  6. 实战演练——保存QQ密码

    保存QQ密码 创建程序 创建一个名为SaveQQ的应用程序,指定包名为cn.itcast.saveqq,设计用户交互界面,登录界面(activity_main.xml)代码: <?xml ver ...

  7. java中的文件存储_File存储 - 文件存储

    文件存储 文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式 化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的 文本数据或二进制数据 ...

  8. 独角兽公司ucloud照片Linux存储/文件存储工程师

    公司介绍: UCloud(上海优刻得信息科技有限公司),是国内领先的公有云服务提供商.团队成员近700人,为5万余家企业级客户在中国大陆.香港.台湾地区,以及东南亚.北美.欧洲等地的业务给予支持,间接 ...

  9. 第一行代码Android个人笔记(五)——文件存储

    文章目录 一.文件存储 1.将数据写到文件中 2.从文件中读取数据 二.SharedPreferences存储 1.获取SharedPreferences对象 2.存储数据 2.读取数据 三.SQLi ...

最新文章

  1. Postmortem报告
  2. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)...
  3. 混合开发之phonegap开发相关知识解析
  4. 投影元素直接隔离_Angular ngcontent 内容投影
  5. 某数加密的流程与原理简析
  6. 使用DBI(perl)实现文本文件的导入导出mysql
  7. 什么是c语言内存编码,c语言内存泄露示例解析
  8. 4个基本不等式的公式高中_写作 | 高中英语作文4个高分写作技巧
  9. Referrer Policy 介绍
  10. sklearn计算准确率,召回率,精确率,F1函数
  11. cmake导入so库_(转)HelloWorld CMake CMake中构建静态库与动态库及其使用
  12. BeanUtils工具
  13. iOS测试和Android测试的区别
  14. 软件测试睡眠原理,测一测你的睡眠质量
  15. 《研究生科研能力训练与培养》
  16. 启动auditd时,报错如下,怎么解决?
  17. 你有一份七夕赚钱指南等待签收
  18. html请求资源不可用,HTTP状态404 – 请求的资源(/)不可用
  19. 王者荣耀上官婉儿的语录
  20. 新增诊所19804家 | 私营诊所要如何主动?才能被患者选择

热门文章

  1. jquery 常用正则表达式验证
  2. 制作《双积分AD转换器》课题的心得
  3. 使用函数求Fibonacci数
  4. 探索智能云服务新模式,云计算重大变革的新联想
  5. App开发日报 2015-05-15 大疆无人机IOS开发之搭建DJI Phantom和iOS视觉平台
  6. windows离线补丁包下载路径-云盾安骑士
  7. 手机端用单击事件模拟双击事件
  8. 网络测试技术——802.1X_MD5认证(上篇)
  9. C++ 向量(vector)一维向量的初始化,二维向量的初始化
  10. eclipse中如何向开源中国(码云)上传代码