Unit6:持久化
1.文件存储
1.写出文件
@Override
protected void onDestroy() {
super.onDestroy();
String inputText = editText.getText().toString();
save(inputText);
}
/**
* Content类的openFileOutput(String a,int b)方法
* a,创建的文件名称 /data/data/<packagename>/files/默认路径
* b,操作模式 MODE_PRIVATE同名覆盖 MODE_APPEND存在追加
* FileOutputStream 返回对象
*/
public void save( String inputText) {
BufferedWriter bufferedWriter = null;
try {
FileOutputStream out = openFileOutput("data", Context.MODE_PRIVATE);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(out));
bufferedWriter.write(inputText);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.读入文件
public String load() {
StringBuilder content = null;
try {
FileInputStream in = openFileInput("data");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
content = new StringBuilder().append(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content.toString();
}
2.SharedPreferences存储
键值对,多数据类型存储
获取SharePreferences对象的三种方式
- context类中getSharePreferences(String 名称,int MODE_PRIVATE) MODE_PRIVATE只有当前应用程序可以对其读写
- activity类中 getPreferences(int MODE_PRIVATE) 默认类名为文件名
- preferenceManager类中 getDefaultShare(Context context) 活动包名作为文件名
写出数据
// 1. 获取sharedPreference对象
// 2. 通过edit()获取edit对象
// 3. 通过putString()等放入数据
// 4. 通过apply()上传数据
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("name","tom");
editor.putInt("age",20);
editor.putBoolean("married",false);
editor.apply();
读入数据
SharedPreferences data = getSharedPreferences("data", MODE_PRIVATE);
String name = data.getString("name", "null");
int age = data.getInt("age", 0);
3.SQlite存储
SQLite数据库
| 名称 | 数据类型 |
|---|---|
| integer | 整型 |
| real | 浮点型 |
| text | 文本 |
| blob | 二进制 |
数据库连接工具 adb
| 命令 | 作用 |
|---|---|
| 1 | Android Studio的模拟器连接数据库需要配置没有Google play的模拟器,否则无法访问数据库,权限不足 |
| adb shell | |
| su | 切换root权限 |
| cd /data/data/包名/databases/ | 进入数据库 |
| sqlite3 库名.db | 进入数据库 |
| .table | 查看所有表 |
| .schema | 查看所有建表结构 |
使用litePal操作数据库

1.添加依赖包
implementation 'org.litepal:LitePal:1.2.0'
2.设置Context
<application
android:name="org.litepal.LitePalApplication"
或者继承LitepalApplication
3.创建映射配置
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="2"></version>
<list>
<mapping class="com.example.unit6_4_litepal.pojo.User"></mapping>
<mapping class="com.example.unit6_4_litepal.pojo.Category"></mapping>
</list>
</litepal>
4.创建映射
public class User extends DataSupport { // 继承DataSupport,方便使用LitePal
private String userName;
private int passWorld;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getPassWorld() {
return passWorld;
}
public void setPassWorld(int passWorld) {
this.passWorld = passWorld;
}
5.操作数据库
建立数据库
Connector.getDatabase(); // 自动建立配置文件内的库和表结构。
添加数据
Book book = new Book();
book.setName("坏蛋是怎样炼成的");
book.setAuthor("六道");
book.setPages(1200);
book.setPrice(19.21);
book.setPress("UnKnow");
book.save(); // 添加数据
删除数据
DataSupport.deleteAll("Book","author = ?","宋世玉");
修改数据
Book book = new Book();
book.setAuthor("宋世玉");
book.updateAll("name = ?","坏蛋是怎样炼成的");
查询数据
// 简单查询
List<Book> books = DataSupport.findAll(Book.class);
// 复杂查询
List<Book> books1 = DataSupport.select("name", "author")
.where("price = ?", "19.21")
.order("pages")
.limit(1)
.offset(1)
.find(Book.class);
for (Book book: books1) {
System.out.println("书名:" + book.getName());
System.out.println("作者:" + book.getAuthor());
System.out.println("出版社:" + book.getPress());
System.out.println("价格:" + book.getPrice());
System.out.println();
}
// 终极查询:直接SQL语句查询
Cursor cursor = DataSupport.findBySQL("select * from Book");
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
}while (cursor.moveToNext());
}
cursor.close();
}
});

浙公网安备 33010602011771号