Android Studio Database Inspector 使用

今天在逛技術網站的時候,看到了一個好東西,Database Inspector 第一眼看上去感覺沒有用過,老樣子趕緊百度一下,發現基本沒有這方面的文章,看來這個應該是在內測還未推出的工具,首先說一下 Database Inspector 是幹什麼的?其實要解決的問題就是我們在調試數據庫的時候,使它可以想編輯 Excel 一樣的簡單,直接修改直接生效,這有什麼好處呢?不用我們在一點一點的去 Debug 數據了,這個看來還是非常有用的。

本來想找一些資料來整理一下,但無意間看到一個 Google 的大佬工程師已經分享了一篇教程,所以參考了一下然後簡單的進行了翻譯,廢話不多說,一下就是具體使用方法,感興趣的夥伴們可以看一下。以下是正文:

創建和管理本地數據庫是大多數移動應用程序的核心組件。但是,無論直接使用 SQLite 還是通過 Room 持久性庫使用,Android 開發人員一直在尋求一種更好的方法來檢查和調試正在運行的應用程序中的數據庫。

最新版本的 Android Studio 4.1(當前在Canary中可用)附帶了一個名為 Database Inspector 的新工具, 該工具可幫助您檢查,查詢和修改正在運行的應用程序中的數據庫。

使用 Database Inspector,修改數據庫中的數據並不比編輯電子表格難。如果您正在使用 Room 並觀察查詢結果,更改將立即反映在您的 App 中!

在本文中,我們將結合使用 Database Inspector 和

Sunflower App 來測試一些極端情況。Sunflower 是一個園藝 App,用於說明 Android Jetpack 的 Android 開發最佳實踐。在閱讀本文時,我建議您克隆這個 Github 倉庫。

首先

Sunflower App 的 UI 包含兩個選項卡。要將一些植物添加到我的花園中,我們看一下 "Plant List" 選項卡,其中列出了我的花園中可用的植物。在右上角有一個過濾器按鈕。當我按下此按鈕時,將顯示以下植物列表:

顯然,此按鈕可根據某些條件過濾植物。但是,讓我們想象一下,我對這個項目不是很熟悉,我想通過使用數據庫檢查器來了解過濾的工作方式。

在 Android Studio 中打開數據庫檢查器,我需要從菜單欄中選擇 View > Tool Windows > Database Inspector

上一步動作會啟動數據庫檢查器。

現在,我需要在運行 API 級別 26 或更高級別的設備上運行應用程序,然後從下拉菜單中選擇應用程序進程。

選擇要檢查的應用程序過程後,數據庫模式將顯示在下面的面板中。要查看 Sunflower 數據庫表,我需要擴展 …/ databases / sunflower-db schema。

讓我們回到該 App,看看過濾後的植物列表。名單包括 AvocadoGrapeOrange

Tomato。如果我可以按植物名稱對植物表進行排序,那麼找到 Avocado 就不難了。讓我們看看數據庫檢查器是否可以做到這一點!

首先,我雙擊 plants 表以顯示其數據。數據顯示的默認頁面大小為 50,但是您可以在較短的結果列表之間減少此數字和頁面。單擊 name 列可將 plant 表按條目名稱排序。果然,Avocado 不在列表的最下方,我在表的第二行中找到它。

查詢數據庫

查看 Avocado 的數據條目,growZoneNumber 最有可能是應用程序用於過濾的屬性。為了驗證這一點,讓我們在growZoneNumber上運行查詢,對於 Avocado而言 為 9 。實際上,該查詢已經存在於 PlantDao.kt 中,我可以直接從 Room@Query

批註中運行查詢。每個 @Query 註釋的行號旁邊都有一個小運行圖標。

當我單擊查詢 getPlantsWithGrowZoneNumber() 的運行圖標並選擇正確的數據庫時,將出現一個彈出窗口,詢問我:growZoneNumber 的值。

我可以輸入值 9 並單擊 “Run” 以查看查詢結果。

另外,我可以鍵入自己的查詢並在工具窗口中運行它。這給了我更多的可選擇性,因為我不僅限於在 DAO 接口中定義的查詢。要運行自己的查詢,請單擊

“Run SQL”,然後從右側新打開的選項卡中選擇 plants 數據庫。

接下來,我在數據庫選擇下拉列表旁邊的框中輸入以下查詢,然後點擊Run

" Select * from plants where growZoneNumber = 9 "

這裡!我們具有與打開過濾器時完全相同的植物列表。

修改和調試數據庫

數據庫檢查器允許您在應用程序在設備上運行時修改應用程序數據庫中的值,從而輕鬆調試應用程序。

首先,我要測試應用程序用戶界面中是否有很長的植物名稱。我將使用 Database Inspector 直接在數據庫上編輯值,而不是更改數據源並使用新數據刷新數據庫。

現在該單元格是可編輯的,我將名稱從 Apple 更改為一種非常特殊的 Apple 類型,然後按 Enter。如果您遵循此步驟,則可以在應用程序用戶界面中鍵入任何您想要測試的長度的內容。

現在,讓我們回到該 App。請注意,我們沒有做任何事情,該應用程序將顯示更新的數據!如果您的應用程序使用

Room 並觀察到查詢結果(using LiveData / Flow),則無需觸發數據庫查詢即可刷新數據。否則,根據您的應用觸發查詢的方式,您可能需要重新啟動該應用或僅再次導航到相關的活動/片段。為了充分發揮 Database Inspector 的潛能,這可能是遷移您的應用程序以使用 LiveDataFlow 的好藉口。

回顧我們的應用程序,看似名片視圖並非旨在處理如此長的植物名稱。稍後將解決此問題,但讓我們繼續下一個測試。

每個植物都有不同的澆水間隔,我想看看何時澆水到期。為此,我需要在花園裡添加一些植物。但是首先,我在數據庫檢查器中選中了 Live updates 複選框。當 Live updates 檢查,數據庫檢查自動顯示任何改變你的應用程序,使得它的數據庫。

我回到 My Garden

選項卡,添加一些植物,例如 AvocadoEggplant。但是首先,我回到 Database Inspector,雙擊 garden_plantings 觀察表。請注意,在添加新植物時,garden_plantings 表中的數據是如何自動更新的。

這兩種植物的澆水間隔均為 3 天。我真的不想等待 3 天才能看到會發生什麼,所以我將編輯數據庫並更改 last_watering_day

。我再次回到 Database Inspector,然後雙擊 garden_plantings。該 last_watering_date 是表的最後一欄。我將兩個記錄的值更改為較小的值,以反映今天的某個日期之前的某個時間。

好的,看來我的時間倒退了一點,但這對於我的測試起了作用。應用界面似乎可以很好地顯示截止日期。為了未來的發展,我們建議在澆水日過後為用戶添加警告。

繼續嘗試新的數據庫檢查器!如果您遇到任何問題,請不要忘記提交錯誤!

最後貼上原文鏈接 https://medium.com/androiddevelopers/database-inspector-9e91aa265316