Android开发 使用文件储存的方式保存QQ密码


Posted in Java/Android onApril 24, 2022

技术要点:

使用文件储存的方式保存数据

实现步骤:

①用户交互界面的设计与实现
②工具类(FileSaveQQjava )的设计与实现
③界面逻辑代码的设计与实现

页面布局:Android开发实现极为简单的QQ登录页面

MainActivity.java代码:

package com.example.saverqq;
import androidx.appcompat.app.AppCompatActivity;
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 java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button etLogin;
    private EditText etPassword;
    private EditText etNumber;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化view
        initView();
        //如果用户已经保存过就进行数据回显
        Map<String, String> userInfo = FileSaveQQ.getUserInfo(this);
        if (userInfo!=null) {
            etNumber.setText(userInfo.get("number"));
            etPassword.setText(userInfo.get("password"));
        }
    }
    private void initView() {
//初始化控件
        etNumber = (EditText) findViewById(R.id.et_number);
        etPassword = (EditText) findViewById(R.id.et_password);
        etLogin = (Button) findViewById(R.id.btn_login);
        //设置按钮点击事件
        etLogin.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        //点击按钮获取账号密码
        String number = etNumber.getText().toString().trim();
        String password = etPassword.getText().toString().trim();
        if (TextUtils.isEmpty(number)) {
            Toast.makeText(this, "请输入QQ账号", Toast.LENGTH_LONG).show();
            return;
        }
        if (TextUtils.isEmpty(password)) {
            Toast.makeText(this, "请输入QQ密码", Toast.LENGTH_LONG).show();
            return;
        }
        Toast.makeText(this, "登录成功", Toast.LENGTH_LONG).show();
//保存用户信息
        boolean isSaveSucess = FileSaveQQ.saveUserInfo(this, number, password);
        if (isSaveSucess) {
            Toast.makeText(this, "保存成功", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "保存失败", Toast.LENGTH_LONG).show();
        }
    }
}

FileSaveQQ.java文件代码:

package com.example.saverqq;
import android.content.Context;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
public class FileSaveQQ {
    //保存用户信息
    public static boolean saveUserInfo(Context context, String number, String password) {
        try {
            //通过上下流获取文件输出流
            FileOutputStream fos = context.openFileOutput("data.txt", context.MODE_PRIVATE);
            //把数据写到文件中
            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.read(buffer);//读到缓冲区
            Map<String, String> userMap = new HashMap<String, String>();
            content=new String(buffer);
            String[] infos = content.split(":");//以 :切割字符串
            userMap.put("number", infos[0]);
            userMap.put("password", infos[1]);
            fis.close();
            return userMap;
        } catch (Exception e) {
            return null;
        }
    }
}

参考图书《Android移动开发基础案例教程》


Tags in this post...

Java/Android 相关文章推荐
解决tk mapper 通用mapper的bug问题
Jun 16 Java/Android
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
图解排序算法之希尔排序Java实现
Jun 26 Java/Android
springboot拦截器无法注入redisTemplate的解决方法
Jun 27 Java/Android
java固定大小队列的几种实现方式详解
Jul 15 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
SpringBoot整合Minio文件存储
Apr 03 Java/Android
Android中View.post和Handler.post的关系
Jun 05 Java/Android
Java中的Kotlin 内部类原理
Jun 16 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 Java/Android
java中如何截取字符串最后一位
Jul 07 Java/Android
Mybatis 一级缓存和二级缓存原理区别
Sep 23 Java/Android
IDEA 2022 Translation 未知错误 翻译文档失败
Android开发实现极为简单的QQ登录页面
Flutter Navigator 实现路由传递参数
Apr 22 #Java/Android
SpringBoot 集成短信和邮件 以阿里云短信服务为例
Java设计模式之代理模式
Apr 22 #Java/Android
Java工作中实用的代码优化技巧分享
Apr 21 #Java/Android
Spring Boot接口定义和全局异常统一处理
Apr 20 #Java/Android
You might like
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
php 操作调试的方法
2012/07/12 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
python实现扫描日志关键字的示例
2018/04/28 Python
Django框架验证码用法实例分析
2019/05/10 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
企业演讲比赛主持词
2014/03/18 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
励志演讲稿500字
2014/08/21 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
php去除数组中为0的元素的实例分析
2021/11/17 PHP
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android