文章目录

  • 案例1: 使用文件存储 保存QQ账号与密码
    • 功能描述
    • saveqq_1.xml
    • FileSaveQQ.java
    • saveqq_1
  • 案例2 使用SP保存QQ账号与密码
    • 功能描述
    • SPSaveQQ.java
    • 其他代码
  • 1. 数据存储方式
  • 2. 文件存储
    • 将数据存入文件中
      • 内部存储:
      • 外部存储:
    • 从文件中读取数据
      • 读取内部存储
      • 读取外部存储
        • 静态申请权限
        • 动态申请权限
  • 3. SharedPreferences 存储
    • 将数据存入SP中
    • 读取与删除数据

案例1: 使用文件存储 保存QQ账号与密码

功能描述


saveqq_1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:padding="10dp"><!--    头像--><ImageViewandroid:layout_width="70dp"android:layout_height="70dp"android:layout_gravity="center_horizontal"android:layout_marginTop="30dp"android:src="@drawable/zh_21" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:background="@color/white"android:orientation="horizontal"><!--        TextView控件用于显示"账号"、"密码"的文本信息--><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="账号"android:textColor="#000"android:textSize="20sp" /><!--EditText用于输入账号、密码的输入框--><EditTextandroid:id="@+id/et_account"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@null"android:padding="10dp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:background="@color/white"android:orientation="horizontal"><!--        TextView控件用于显示"账号"、"密码"的文本信息--><TextViewandroid: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: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_marginTop="25dp"android:background="#3C8DC4"android:text="登录"android:textColor="@color/white"android:textSize="20sp" />
</LinearLayout>

FileSaveQQ.java

package com.example.chapter5.saveqq;import android.content.Context;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;//    实现qq账号、密码的存储与读取
public class FileSaveQQ {/*** saveUserInfo() 该方法用于 保存QQ账号和密码到data.txt文件中** @param context* @param account* @param password* @return*/public static boolean saveUserInfo(Context context, String account, String password) {FileOutputStream fos = null;try {/*** 调用openFileOutput()方法* 来获取文件的输出流对象fos*/fos = context.openFileOutput("data.txt", Context.MODE_PRIVATE);/*** 调用write方法,获取用户输入的账号、密码的字节* 将数据转换为字节码的形式写入data.txt文件中*/fos.write((account + ":" + password).getBytes());return true;    //保存数据成功} catch (Exception e) {e.printStackTrace();return false;   //保存数据失败} finally {//调用close()方法,关闭输出流fostry {if (fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 从data.txt文件中获取存储的QQ账号和密码** @param context* @return*/public static Map<String, String> getUserInfo(Context context) {String content = "";FileInputStream fis = null;try {// 调用openFileInput()方法// 获取文件的输入流对象fisfis = context.openFileInput("data.txt");// 调用available()方法 获取文件长度,并以这个长度创建字节数组buffer// 将输入流对象中的数据转换为字节码的形式byte[] buffer = new byte[fis.available()];//通过read()方法读取字节中数据,将数据读取到buffer对象中fis.read(buffer);//将获取的字节码 buffer对象 转换为String类型的字符串content = new String(buffer);Map<String, String> userMap = new HashMap<String, String>();//将字符串以":"分隔后,形成一个字符串数组String[] infos = content.split(":");//数组中的第一个数据放入userMap集合中(第一个数据就是账号)userMap.put("account", infos[0]);//数组中的第二个数据放入userMap集合中(第二个数据是密码)userMap.put("password", infos[1]);//这个集合中就存放用户的账号和密码return userMap;} catch (Exception e) {//如果获取失败,程序执行catch代码块e.printStackTrace();return null;} finally {//最后执行finally代码块try {//调用close()方法关闭输入流对象fisif (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}}}
}

saveqq_1

package com.example.chapter5.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.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;import com.example.chapter5.R;import java.util.Map;public class saveqq_1 extends AppCompatActivity implements View.OnClickListener {private EditText et_account;    //账号输入框private EditText et_password;   //密码输入框private Button btn_login;   //登陆按钮@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.saveqq_1);initView();//通过工具类FileSaveQQ中的getUserInfo方法获取QQ账号、密码Map<String, String> userInfo = FileSaveQQ.getUserInfo(this);if (userInfo != null) {//将获取的账号、密码显示到界面上et_account.setText(userInfo.get("account"));et_password.setText(userInfo.get("password"));}}private void initView() {et_account = (EditText) findViewById(R.id.et_account);et_password = (EditText) findViewById(R.id.et_password);btn_login = (Button) findViewById(R.id.btn_login);//设置按钮的点击监听事件btn_login.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btn_login://当点击登录按钮时,获取界面上输入的QQ账号和密码String account = et_account.getText().toString().trim();String password = et_password.getText().toString();//检验输入的账号和密码是否为空if (TextUtils.isEmpty(account)) {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();//保存用户信息boolean isSaveSuccess = FileSaveQQ.saveUserInfo(this, account, password);if (isSaveSuccess) {Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();}break;}}
}

案例2 使用SP保存QQ账号与密码

功能描述

SPSaveQQ.java

package com.example.chapter5.saveqq;import android.content.Context;
import android.content.SharedPreferences;import java.util.HashMap;
import java.util.Map;//通过SharedPreferences来存储与读取信息
public class SPSaveQQ {//保存QQ账号和登录密码到data.xml文件中public static boolean saveUserInfo(Context context, String account,String password) {//通过getSharedPreferences()获取SharedPreferences这个类的对象spSharedPreferences sp = context.getSharedPreferences("data",Context.MODE_PRIVATE);//通过edit()方法获取编辑类Editor对象editSharedPreferences.Editor edit = sp.edit();//将账号、密码添加到edit中edit.putString("userName", account);edit.putString("pwd", password);//commit()提交数据 提交到data.xml中edit.commit();return true;}//从data.xml文件中获取存储的QQ账号和密码public static Map<String, String> getUserInfo(Context context) {SharedPreferences sp = context.getSharedPreferences("data",Context.MODE_PRIVATE);//获取账号、密码String account = sp.getString("userName", null);String password = sp.getString("pwd", null);//将获取的账号、密码存放在Map集合中Map<String, String> userMap = new HashMap<String, String>();userMap.put("account", account);userMap.put("password", password);return userMap;}
}

其他代码

xml中的代码不变,

savaqq_1.java中的代码只需要修改

onCreate()中的

和onClick()中的

1. 数据存储方式


本章重点:文件存储、SharedPreferences、SQLite数据库

2. 文件存储

将数据存入文件中


内部存储:

外部存储:

从文件中读取数据

读取内部存储

读取外部存储

静态申请权限

动态申请权限


3. SharedPreferences 存储

将数据存入SP中

读取与删除数据


关于key值的注意点:

安卓---第5章 数据存储---保存QQ账号与密码相关推荐

  1. 【Android实战】保存QQ账号与密码

    大家好,我是汤姆凯特. 写在前面:今天用保存QQ账号和密码的实战演练,带大家掌握Android存储中最基本的文件存储方式 文件存储是Android中最基本的一种数据存储方式,它与Java中的文件存储类 ...

  2. 《Android移动应用基础教程》之保存QQ账号和密码

    FileSaveQQ.java package njitt.software.saveqq;import android.content.Context;import java.io.FileInpu ...

  3. android 帐号密码xml,《Android移动应用基础教程》之保存QQ账号和密码

    FileSaveQQ.java package njitt.software.saveqq; import android.content.Context; import java.io.FileIn ...

  4. 实战演练--保存QQ账号与密码

    1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...

  5. android移动应用基础教程--qq账号与密码

    android移动应用基础教程--qq账号与密码 android移动应用基础教程p115案例 实战演练-保存QQ账号密码. activity_main.xml <?xml version=&qu ...

  6. ​DMBOK知识梳理for CDGA/CDGP——第六章 数据存储与操作(附常考知识点)

    第六章 数据存储与操作 第六章在CDGA|CDGP考试中的分值占比较少,知识点比较密集,主要考点包括:数据存储与操作的定义.目标.数据库管理员(DBA)的角色定位及类型.数据处理的类型ACID和BAS ...

  7. 简单步骤,使用 Android studio 实现保存 QQ 账号密码,和简易 QQ 用户登录界面

    利用 Android studio 2021 软件输出一个简易用户登录界面,拥有头像并且能够实现对自行输入的账号密码进行保存,文件名为 saveqq,功能实现对账号与密码的输入和存储,简单QQ界面布局 ...

  8. QQ提示当前网页非官方页面,请勿输入QQ账号和密码,如需访问,请复制后使用浏览器访问...

    QQ提示当前网页非官方页面,请勿输入QQ账号和密码,如需访问,请复制后使用浏览器访问  Lan   2020-05-13 17:41   751 人阅读  0 条评论 昨天,我的这个博客在QQ上进行访 ...

  9. 第6章 数据存储全方案,详解持久化技术

    所有的App都可以说是与数据打交道的,离开数据它们什么都不是.那么平时我们怎么存储一些关键的数据呢? 1 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关 ...

最新文章

  1. 前端Vue学习之路(五)插件的使用
  2. SpringBoot (二) :全局异常处理设置
  3. HTML在网页设计中是什么作用?
  4. Flutter基础知识链接汇总(持续更新中)
  5. ETCD 问题、调优、监控
  6. NIHCC发布迄今世界最大的CT医学影像数据集(附下载)
  7. 微信小程序开发实战——模块化
  8. HDU-4292-Food(最大流匹配问题)
  9. Windows button控件(按钮控件)
  10. MFC位图读取操作步骤记录
  11. Java、两点间距离
  12. 一个屌丝程序猿的人生(五十)
  13. IT - 偶像的力量
  14. P8196 [传智杯 #4 决赛] 三元组
  15. python解密码编程_python生成密码本 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...
  16. MPA海洋捕食者算法学习笔记
  17. 一起学CC3200系列教程之跑马灯---库
  18. 读书笔记-追风筝的人
  19. jsp及Servlet经典面试题以及答案
  20. 爬取正方教务管理系统获取学生信息

热门文章

  1. 4g模块注册上网 移远_移远EC20(4G模块)通过openwrt路由器拨号上网
  2. C# 自定义事件(EventArgs)
  3. 聊天机器人伪装成真人的10种伎俩
  4. android 使用手机调试问题 荣耀9青春版USB无法授权
  5. 2020上半年主要国产ERP软件厂商业绩对比
  6. zookeeper 进入客户端_zookeeper客户端命令详解
  7. 基于声网 Flutter SDK 实现互动直播
  8. 名帖45 北魏 楷书《元显儁墓志》
  9. 施密特触发器的作用以及如何整型
  10. 手把手刷二叉树系列完结篇