"安卓第二天笔记--数据保存"
在安卓应用开发中,数据保存是不可或缺的一部分,它确保用户的数据得以持久化,即使应用关闭或设备重启,数据也能被恢复。本笔记主要涉及私有文件存储方式,这通常是应用用来保存敏感信息如用户登录凭证的方式。
首先,我们看到一个简单的登录界面布局,包含了一个ImageView、两个EditText(用于输入QQ号码和密码)、一个CheckBox(用于记住密码)以及一个Button(登录按钮)。这个界面是通过XML布局文件定义的,其中EditText的`inputType`属性分别设为`number`和`textPassword`,以限制用户只能输入数字和文本,并且密码是隐藏的。
当用户在EditText中输入QQ号码和密码后,我们可能希望在他们选择“记住密码”选项时保存这些信息。Android提供了多种数据保存的方法:
1. SharedPreferences:这是一个轻量级的存储选项,适合保存键值对,如登录凭据。我们可以使用`SharedPreferences.Editor`来添加或修改键值对,然后调用`commit()`或`apply()`来保存更改。例如,可以将QQ号码和密码保存为字符串,而记住密码的状态可以保存为布尔值。
```java
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("qqNumber", et_qqNumber.getText().toString());
editor.putString("qqPwd", et_qqPwd.getText().toString());
editor.putBoolean("remember", cb_remember.isChecked());
editor.apply();
```
2. 内部存储:应用可以创建自己的私有文件夹在内部存储中,只有该应用有权访问。如果数据量较大,如用户上传的图片或音频文件,可以选择这种方式。使用`openFileOutput()`方法可以创建和写入文件。
```java
FileOutputStream fos = openFileOutput("qq_info.txt", Context.MODE_PRIVATE);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos));
writer.write("qqNumber=" + et_qqNumber.getText().toString());
writer.newLine();
writer.write("qqPwd=" + et_qqPwd.getText().toString());
writer.newLine();
writer.write("remember=" + cb_remember.isChecked());
writer.close();
```
3. SQLite数据库:对于更复杂的数据结构,如用户联系人列表,可以使用SQLite数据库。创建一个数据库表,然后插入、查询或更新数据。不过,这个例子中由于数据比较简单,使用SharedPreferences或内部存储已经足够。
4. ContentProvider:虽然在这个简单的场景下不常用,但ContentProvider可以提供一种标准的方式来与其他应用共享数据,或者在一个应用的不同组件之间共享数据。
在保存数据后,下次启动应用时,我们需要检查SharedPreferences或文件系统中是否存在之前保存的登录信息,如果存在并且用户选择了“记住密码”,则可以直接填充到登录界面中,提高用户体验。
Android提供了多种数据保存机制,开发者可以根据具体需求选择合适的方法。在处理用户敏感信息时,务必确保数据的安全性,遵循最佳实践,如加密存储密码,而不是直接保存明文。