实验目的
- 学习
SharedPreference的基本使用。- 学习
Android中常见的文件操作方法。- 复习
Android界面编程。
实现效果

SharedPreference的使用
它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用
SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下
先来创建一个简单的设置密码的页面

1 |
|
其实这个页面是有三个EditText的,
有两个是设置密码时的输入框(设置密码和确认密码)
有一个是登陆时的密码输入框(登录密码)
此时还没有设置密码,所以另外一个EditText设置不可见INVISIBLE
处理按钮点击的事件
文本清除按钮:
1 | button_clear.setOnClickListener(new View.OnClickListener() { |
确定按钮:
1 | button_ok.setOnClickListener(new View.OnClickListener() { |
输入密码之后,查看虚拟机的文件
Logcat->Device File Explore->data/data/com.janking.project3.shared_prefs->MY_PASSWORD
可以发现,确实存进去了密码,而且还存进去了一个关键字为STATUS的东西,这个是用来辨别是否已经设置了密码的

为了利用好这个STATUS字段,在MainActivity的onCreate方法里添加
1 | //这三句话也很重要,即使xml已经设置了三个可见度是,但是经过测试,中途删除了SharedPreference里面的文件的话输入框布局还是没变 |
Internal Storage文件的操作
在MainActivity设置密码之后,再登录成功之后,跳到另一个页面SecondActivity在这里简单使用一下文件的操作
布局

1 |
|
LOAD和SAVE按钮的事件处理
1 | //前面记得加 |
这其中有个小问题,就是读取的文件流是用byte数组接收的,开始我想把它转换为String用的是toString方法,但是得到的是乱码,然后改成new String()就可以了
toString()与new String ()用法区别
str.toString是调用了object对象的类的toString方法。一般是返回这么一个String:[class name]@[hashCode]。new String(str)是根据parameter是一个字节数组,使用java虚拟机默认的编码格式,将这个字节数组decode为对应的字符。若虚拟机默认的编码格式是ISO-8859-1,按照ascii编码表即可得到字节对应的字符。什么时候用什么方法呢?
new String()一般使用字符转码的时候,byte[]数组的时候
toString()将对象打印的时候使用
经检验,文件内容确实写了进去(内容很乱,是我写的,而不是乱码……),文件存放在files文件夹中

当 Activity 不可⻅时,如何将其从 activity stack 中除去(按返回键直接返回Home)
- 让不处于活动状态的
MainActivity直接调用finish方法,点击返回按钮后会发现它就没了……
1 | //当此Acticity暂停时直接结束(移出栈) |
- 还有一种办法,在
manifests文件中添加
android:noHistory="true"

External Storage文件的操作
在manifests中添加
1 | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |

进入sdk目录下的tools文件夹,输入下列命令
.\mksdcard 128M sdcard.img
即可创建一个128M大小的命名为sdcard的映像文件,它可以挂载到虚拟机上作为sd卡目录

添加一个图片文件到mipmap中,这里我加了我的头像face.jpg
在SecondActivity中新建一个方法
1 | void createExternalStoragePrivateFile(){ |
并在onCreate中调用它
应用启动到SecondActivity中时,查看文件确实存在
