Stetho增加SD卡路径的数据库
Stetho簡介
Chrome的Developer Tools對于WEB開發(fā)者來講幾乎是一個神器,而Chrome Store里也有無奇不有的插件,如果Chrome能調(diào)試應(yīng)用應(yīng)該是一件美好的事,而Facebook開源的一個工具Stetho讓Chrome調(diào)試Android應(yīng)用不再是一個夢。安卓在調(diào)試時,有時候需要查看數(shù)據(jù)庫,SharePreference等,而這個前提是必須root,另一方面,andoird的網(wǎng)絡(luò)方面的抓包調(diào)試顯得很困難,而這一切,Stetho都為我們輕輕松松地解決。除了使用android集成環(huán)境里的工具查看view樹,使用Stetho也可以做到。
Stetho使用
具體使用請見這里使用詳解,
1.4版本添加SD卡路徑數(shù)據(jù)庫
1.4版本Stetho 在chrome里默認(rèn)只能/data/data下面的數(shù)據(jù)庫的名稱,我們的項目中數(shù)據(jù)庫是指定在SD卡路徑下的,怎么添加其他路徑的數(shù)據(jù)庫呢?
查看DefaultInspectorModulesBuilder(context).finish()的代碼
DefaultInspectorModulesBuilder(context).finish()
DataBase會首先添加mDatabaseFilesProvider,找到mDatabaseFilesProvider被設(shè)置的地方,DatabaseFilesProviders提供了數(shù)據(jù)庫的列表,Stetho默認(rèn)使用的是DefaultDatabaseFilesProvider類,使用系統(tǒng)mContext.databaseList()提供數(shù)據(jù)庫列表,我們只要實現(xiàn)自己的DefaultDatabaseFilesProvider的即可添加新的數(shù)據(jù)庫列表。
DefaultDatabaseFilesProvider
實現(xiàn)好自己的DefaultDatabaseFilesProvider后,就可以在chrome端看到相應(yīng)的數(shù)據(jù)庫了,我們項目中新增了SD卡路徑下的數(shù)據(jù),But , 當(dāng)我們在chrome端點開新增的數(shù)據(jù)查看時,app直接崩潰,報錯是 數(shù)據(jù)庫路徑無法打開,查看日志發(fā)現(xiàn) 我們添加的數(shù)據(jù)庫路徑是SD卡路徑的,但是Stetho打開的數(shù)據(jù)路徑居然是/data/data目錄下的~.~~.~~.~一臉懵逼~.~~.~~.~
再重頭看DefaultInspectorModulesBuilder(context).finish()的代碼,發(fā)現(xiàn)DataBase創(chuàng)建時使用了SqliteDatabaseDriver類,在SqliteDatabaseDriver中找到打開數(shù)據(jù)庫的代碼
DefaultInspectorModulesBuilder(context).finish()
SqliteDatabaseDriver
~.~,這個默認(rèn)就是/data/data, chrome端回傳的只傳了個數(shù)據(jù)庫文件名。
怎么解決
1.繼承DatabaseDriver,重寫openDatabase(String databaseName)方法支持mDatabaseFilesProvider中定義的數(shù)據(jù)庫路徑查找
mDatabaseFilesProvider
DatabaseDriver
2.替換DefaultInspectorModulesBuilder(context).finish()返回列表中DataBase對象。
DefaultInspectorModulesBuilder
完整代碼已上傳GitHub
SkethoWithSdCard
1.5版本
Stetho1.5.0 終于支持添加自定義的數(shù)據(jù)庫路徑了,但是在項目和greenDao配合使用過程中遇到了幾個問題,在此記錄一下
1.添加SD卡路徑數(shù)據(jù)庫
1.5.0已經(jīng)支持自定數(shù)據(jù)庫路徑功能,只需要實現(xiàn)自己的DatabaseFilesProvider即可。
2. DBLocked問題
Stetho調(diào)試時候數(shù)據(jù)庫時,都會重新開啟一個SqliteDatabase,greenDao也會啟動一個SqliteDatabase,所以會經(jīng)常遇到DBLocked的問題,解決方法就是 與greenDao使用同一個SqliteDatabase,需要重新實現(xiàn)DefaultDatabaseConnectionProvider類,通過自己定義的DBmanager獲取統(tǒng)一的SqliteDatabase.
3. 操作已經(jīng) closed的數(shù)據(jù)庫
Stetho調(diào)試時候數(shù)據(jù)庫時每個命令結(jié)束之后會都會關(guān)閉數(shù)據(jù)庫,導(dǎo)致greenDao數(shù)據(jù)操作問題,解決方法是 注釋掉關(guān)閉數(shù)據(jù)庫的地方,實現(xiàn)自己的MySqliteDatabaseDriver,把原來的SqliteDatabaseDriver代碼粘貼過來,把下面兩個方法中的database.close();注釋掉.
StethoWrapper
可關(guān)注微信二維碼共同交流
總結(jié)
以上是生活随笔為你收集整理的Stetho增加SD卡路径的数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: new Date处理日期格式及兼容浏览器
- 下一篇: springboot整合redisson