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 相关文章推荐
源码解读Spring-Integration执行过程
Jun 11 Java/Android
使用feign服务调用添加Header参数
Jun 23 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
在Spring-Boot中如何使用@Value注解注入集合类
Aug 02 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
Apr 24 Java/Android
Java8 CompletableFuture 异步回调
Apr 28 Java/Android
Java实现带图形界面的聊天程序
Jun 10 Java/Android
Java界面编程实现界面跳转
Jun 16 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下使用curl模拟用户登陆的代码
2010/09/10 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
基于php实现的验证码小程序
2016/12/13 PHP
php 浮点数比较方法详解
2017/05/05 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
js indexOf()定义和用法
2012/10/21 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
python实现bitmap数据结构详解
2014/02/17 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python阶乘求和的代码详解
2020/02/14 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
银行竞聘报告范文
2014/11/06 职场文书
优秀员工事迹材料
2014/12/20 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript