实战安卓踩坑记录(五)

0.前言

跟着书本的进度学到了数据储存,因为版本的原因又是很多坑。但这章的也是感受很多。

1.查看数据库无权限

学到《第一行代码 Android 》(第二版)6.4章节用sqlite存储数据时,需要调用adb来查看数据库。但遇到了这样一个问题,一直显示的都是$(普通管理员权限),输入su(实测应该是supend命令)命令后,也是不行,效果如图。
在这里插入图片描述

1.1.解决方案一,更换虚拟机版本

造成这个问题的原因是因为Android6.0之后的虚拟机无法设置权限,所以只能新建一个Android6.0版本的虚拟机了。方法就是打开AVD(Android virtual device) manager,然后下载一个Android6.0版本的虚拟机,配置好之后用这个虚拟机打开即可。

1.2.解决方案二,使用其它数据库查看软件

我们想这样一个问题,只要我们的代码执行正确了,就一定会产生一个数据库文件,我们只允许找到这个文件并用支持sqlite的数据库管理软件就可以看到了。顺着这个思路,第一步就是找到这个数据库文件。
在高版本的Android Studio中右下方内置了Device File Explorer,这个就是书上说的文件浏览器,其余版本的AS也都有,可以自行寻找。

在这里插入图片描述
点击之后,找到创建好的数据库文件。/data/data/com.example.databasetest/databases/BookStore.db,正常的话应该是这个路径,然后右键,Save As(另存为)到一个你指定的地方。
在这里插入图片描述
这是一个db类型的文件,需要用支持sqlite数据库格式的软件打开。下一步就是选择合适的数据库软件了。
在这里插入图片描述
作为一个学过Java的人,肯定知道MySQL这个数据库软件吧,也知道Navicat这个数据库可视化软件。如果你的电脑上碰巧使用的是Navicat Premium,这是一个支持几乎所有主流数据库的数据库可视化软件,用它就可以打开这个.db文件。但因为它比较庞大,而且正常人不会使用很多的数据库,大多数人使用的都是某一个版本,比如Navicat for MySQL等,而且不免费,想要使用需要一定的方法,所以如果不是碰巧电脑上有Navicat Premium,是不建议使用这个软件的。

主推的一个软件是sqlite studio,这是一个开源免费且轻量化的sqlite数据库管理软件,GitHub的地址https://github.com/pawelsalawa/sqlitestudio/releases
可以直接下载.zip版本,解压即可用,不用安装,大小也只有27.5MB。
在这里插入图片描述
但由于GitHub服务器在国外,国内下载比较慢而且不稳定,https://www.lanzous.com/iaqp8yd给个下载链接,可以使用,这个的版本是3.2.1。
解压之后找到相应的.exe文件,将那个.db文件用sqlite studio打开,即可看到数据库内的信息。或者把.db文件拖入sqlite studio中。这样每次更新之后,在Save As之前,点一下Synchronize(同步),这样.db文件才是最新的。然后Save As 即可。

这个方法有一点需要注意,每次Save As 之前如果想替换掉之前另存为的,需要先把之前的数据库文件和.db之间的关联取消,简单来说就是断开连接,或者直接关闭sqlite studio。

1.3.解决方案三,用别的命令开启

这个方法是最接近原书的体验的方案,但比较麻烦(或许是我没找到简单的方案)。
一次执行以下的命令

adb shell#需要确保虚拟机已经打开了
run-as com.example.databasetest#as后面的为项目的路径,如果按照书上的就是这个路径
cd databases#进入databases文件夹,我们的数据库文件就在里面
ls#显示当前目录下的所有文件

如果按照上面的命令逐个执行的话,效果如图。
在这里插入图片描述
此时就可以按照书上的步骤对其使用sqlite3命令了,后面的操作和书上的一样,我就不赘述了。
在这里插入图片描述

2.总结

学习这一章节给我最大的感受就是,和Java太像了。Android中的sqlite就像Java中的MySQL,而Android中的各种对sqlite的API和Java的JDBC神似,无论是代码还是包含的一些内容。而这种方法说实话真的太麻烦了,SQL语句中有一个字母甚至标点符号的错误,都很导致程序运行错误,因为不知道具体错在SQL语句的那一块,拍错也很麻烦(我作为一个学过数据库基础实际运用过的人也SQL语句写错,并且排错用了很长时间)。所以这种开发注定需要升级。这就迎来了ORM映射框架(Android中的LitePal,Java中的hibernate或者mybatis),都是对其进行了封装,让我们能用面向对象的方法对数据库操作,而无需在纯SQL语句。这个在后面的LitePal中会有很深的感受,学过这一点之后,在我以后学hibernate或者mybatis时能够快速上手,也真的不错。

另一个感受是,大概学完前五章之后,感觉自己写Android的代码写的飞快,各种bug也能快速找到,真的有种入了门的感觉,也可能是对Android Studio这个工具比较熟悉了,遇到问题解决起来能依赖它就省了很多时间。在学习的过程中,自己的Java水平也得到了加强,理解了Java中的很多东西。感觉Android学的真的不亏。

对这本书,我也是有极高的评价,确实让我感觉学的很轻松,但学到了真东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值