Sunflower 应用的 UI 包含两个标签页。先看一下植物目录标签页,里面列出了可以添加到我的花园的植物。在右上角有一个筛选按钮,点击该按钮会按生长区筛选植物,出现如下列表:
可以很直观地看到,这个按钮会根据一些条件来筛选植物。假设我们对整个工程完全不了解,希望通过 Database Inspector 来搞清楚如何实现筛选功能。
从菜单栏依次选择 View > Tool Windows > Database Inspector,就能在 Android Studio 里打开 Database Inspector。初次打开工程的时候,需要静待工程编译完成后即可出现Database Inspector 的选项。
这样就打开了 Database Inspector:
运行 Database Inspector 需要在 API Level 26 或者更高的设备上运行应用,在下拉菜单里选择该应用的进程:
选择所要检查的应用进程之后,数据库的架构就会出现在下面的面板上。如果要查看 Sunflower 数据库表,需要找到 Databases 并展开sunflower-db:
回到应用,我们看一下经过筛选的植物列表: 这个列表里有 Avocado (鳄梨)、Grape (葡萄)、Orange (橙子) 和 Tomato (番茄)。如果我按照植物名称进行排序,那么要找 Avocado 的话就会很方便。所以我们可以看看 Database Inspector 可不可以做到这点。
首先,双击 Database Inspector 里的 plants 表来显示表里的数据。数据是以默认每页 50 条记录来显示,不过如果数据总数更短,那么每页的结果数量和页数也会发生变化。点击名称列可以让植物表按照名称进行排序。正如我们所想,Avocado 已经排在列表的前面了,它就在数据表的第二行。
请求数据库
看一下 Avocado 的数据输入,在应用中可以使用 growZoneNumber 进行筛选。要验证这一点,我们运行一个请求,将 growZoneNumber 设置为 9,对应结果应该是 Avocado。实际上,这个请求已经在 PlantDao.kt 出现了,我们可以直接通过 Room 的 @Query 注解来调用这个请求。每个 @Query 注解的代码行数旁边都有一个运行小图标。
当我点击运行图标来请求 getPlantsWithGrowZoneNumber() 并且选择对应的数据库的时候,会弹出一个对话框让我们填写:growZoneNumber 的值。
这里我们输入 9 然后点击** Run **来查看请求结果。
除此之外,我们也可以在工具窗口里输入我们自己的请求并运行。这样能够提供更大的自由度,也不会受限于 Dao 接口里的请求语句定义。要运行我们自己的查询语句,点击 Run Query 并且从右侧新打开的标签页选择 plants 数据库。
然后,在数据库下拉菜单旁边的文本框里输入下面这句查询语句,并点击 Run。
Select * from plants where growZoneNumber=9
大家可以看到,这里请求的筛选结果和应用里开启筛选器的时候是一样的。
修改以及调试数据库
Database Inspector 使得调试应用变得轻而易举,它还可以让开发者直接修改设备上已运行应用的数据库值。
首先,我想在应用 UI 上测试一下较长的植物名称。我们打算使用 Database Inspector 直接修改数据库里的值,而不是通过修改数据源再刷新数据来进行测试。
现在这里的数据元素已经可以编辑,我将这里的 Apple 改为 A really special type of Apple,然后点确认。如果您也在同步进行操作,您可以输入一些期望长度的名称数据在 UI 中进行测试。
回到应用会发现我们什么操作都没做,应用就已经显示了最新的数据。如果您的应用使用 Jetpack Room,并且监听着请求结果 (使用 LiveData/Flow),您就没必要发起数据库请求来刷新数据。否则,根据您应用触发请求的方式,可能需要重启应用或者重新打开相关的 activity 或者 fragment 才可以。这也算是迁移到 LiveData 或者 Flow 的一个不错的理由,这样也能发挥 Database Inspector 的全部潜能。
再来看看应用,可以发现这里的 CardView 并没有很好地显示较长的植物名称。我会在未来修复这个问题,接下来我们先来看看下面的测试。
尾声
如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
这里,笔者分享一份从架构哲学的层面来剖析的视频及资料给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
Android进阶学习资料库
一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!
大厂面试真题
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《2019-2021字节跳动Android面试历年真题解析》
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!