Develop And Improve。
花了一天时间搞定了随机密码生成器、主界面、数据库,然而又花了一天时间解决Bug….不过借此机会学会了很多东西只能说这波不亏
Google到了很多方法,选择了一个广为认可并且非常方便的方法
1 | static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-=?."; |
使用SecureRandom()函数在事先给定的密码字符集中随机获得一个字符,循环一定次数得到密码串。
方法传入的密码长度是从SeekBar中获得的,SeekBar我使用的是ProgressHint这一开源库,通过
1 | seekBar.setMax(16); |
这两行代码实现设置最大长度为16,初始长度6,最终实现的效果如下图,拖动SeekBar设置密码长度,点击按钮生成密码并设置到Edittext上
作为一个密码管理软件,如果数据的存放不够安全的话简直无法想象,所以在着手写数据库时我就打算找一个安全的数据库,最终选择了SqlCipher,一个对SqlLite进行扩展的开源库,AES-256加密方法数据库完全加密,在使用过程中没有什么难题,用法和普通SqlLite基本完全相同,只不过在SQLiteDatabase db = this.getWritableDatabase();方法中要加上一个密码作为打开和写入的唯一凭证,同时在载入数据库时候要加一局SQLiteDatabase.loadLibs(this);
数据库的操作基本大同小异,我新建了一个DatabaseHelper类封装数据库创建、升级、删除以及增删改查各项操作,刚开始在getRecordCounts()方法中犯了一个错误,cursor.close();之后我又return cursor.getCount();很低级的错误。
本来想在主界面显示记录简略信息,点击后打开详情界面,但是偶然看到了一个很酷炫的开源库FoldingCell 下面是官方提供的效果图
我实现的初步效果图如下
本来折叠状态下控件也使用纯色作为背景,后来发现可以用xml文件方便地描绘边框
1 | <?xml version="1.0" encoding="utf-8"?> |
在使用这个控件时发现一个问题,因为我使用的是ListView,新建一个RecordAdapter注入控件,但是实际使用中每六个控件会显示同样的动画效果,即展开第一个控件后第六个也会自动展开,谷歌后貌似是ListView的回收机制与这个库之间的Bug,在开源库里Issue中也有很多人提出这个问题,需要添加fc.fold(true);这一行代码避免这一Bug,不过这样在控件滑出屏幕后会自动折叠。
引导页、解锁功能