Stetho增加SD卡路径的数据库

Stetho简介

Chrome的Developer Tools对于WEB开发者来讲几乎是一个神器,而Chrome Store里也有无奇不有的插件,如果Chrome能调试应用应该是一件美好的事,而Facebook开源的一个工具Stetho让Chrome调试Android应用不再是一个梦。安卓在调试时,有时候需要查看数据库,SharePreference等,而这个前提是必须root,另一方面,andoird的网络方面的抓包调试显得很困难,而这一切,Stetho都为我们轻轻松松地解决。除了使用android集成环境里的工具查看view树,使用Stetho也可以做到。

Stetho使用

具体使用请见这里使用详解

1.4版本添加SD卡路径数据库

1.4版本Stetho 在chrome里默认只能/data/data下面的数据库的名称,我们的项目中数据库是指定在SD卡路径下的,怎么添加其他路径的数据库呢?

查看DefaultInspectorModulesBuilder(context).finish()的代码

《Stetho增加SD卡路径的数据库》 DefaultInspectorModulesBuilder(context).finish()

DataBase会首先添加mDatabaseFilesProvider,找到mDatabaseFilesProvider被设置的地方,DatabaseFilesProviders提供了数据库的列表,Stetho默认使用的是DefaultDatabaseFilesProvider类,使用系统mContext.databaseList()提供数据库列表,我们只要实现自己的DefaultDatabaseFilesProvider的即可添加新的数据库列表。

《Stetho增加SD卡路径的数据库》 DefaultDatabaseFilesProvider

实现好自己的DefaultDatabaseFilesProvider后,就可以在chrome端看到相应的数据库了,我们项目中新增了SD卡路径下的数据,But , 当我们在chrome端点开新增的数据查看时,app直接崩溃,报错是 数据库路径无法打开,查看日志发现 我们添加的数据库路径是SD卡路径的,但是Stetho打开的数据路径居然是/data/data目录下的~.~~.~~.~一脸懵逼~.~~.~~.~

再重头看DefaultInspectorModulesBuilder(context).finish()的代码,发现DataBase创建时使用了SqliteDatabaseDriver类,在SqliteDatabaseDriver中找到打开数据库的代码

《Stetho增加SD卡路径的数据库》 DefaultInspectorModulesBuilder(context).finish()
《Stetho增加SD卡路径的数据库》 SqliteDatabaseDriver

~.~,这个默认就是/data/data, chrome端回传的只传了个数据库文件名。

怎么解决

1.继承DatabaseDriver,重写openDatabase(String databaseName)方法支持mDatabaseFilesProvider中定义的数据库路径查找

《Stetho增加SD卡路径的数据库》 mDatabaseFilesProvider
《Stetho增加SD卡路径的数据库》 DatabaseDriver

2.替换DefaultInspectorModulesBuilder(context).finish()返回列表中DataBase对象。

《Stetho增加SD卡路径的数据库》 DefaultInspectorModulesBuilder

完整代码已上传GitHub

SkethoWithSdCard

1.5版本

Stetho1.5.0 终于支持添加自定义的数据库路径了,但是在项目和greenDao配合使用过程中遇到了几个问题,在此记录一下

1.添加SD卡路径数据库

1.5.0已经支持自定数据库路径功能,只需要实现自己的DatabaseFilesProvider即可。

《Stetho增加SD卡路径的数据库》

2. DBLocked问题

Stetho调试时候数据库时,都会重新开启一个SqliteDatabase,greenDao也会启动一个SqliteDatabase,所以会经常遇到DBLocked的问题,解决方法就是 与greenDao使用同一个SqliteDatabase,需要重新实现DefaultDatabaseConnectionProvider类,通过自己定义的DBmanager获取统一的SqliteDatabase.

《Stetho增加SD卡路径的数据库》
《Stetho增加SD卡路径的数据库》

3. 操作已经 closed的数据库

Stetho调试时候数据库时每个命令结束之后会都会关闭数据库,导致greenDao数据操作问题,解决方法是 注释掉关闭数据库的地方,实现自己的MySqliteDatabaseDriver,把原来的SqliteDatabaseDriver代码粘贴过来,把下面两个方法中的database.close();注释掉.

《Stetho增加SD卡路径的数据库》
《Stetho增加SD卡路径的数据库》

StethoWrapper

《Stetho增加SD卡路径的数据库》 可关注微信二维码共同交流

    原文作者:山鱿鱼
    原文地址: https://www.jianshu.com/p/bc80a7f17988
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞