📜  如何在Android Studio中查看和定位领域数据库?(1)

📅  最后修改于: 2023-12-03 14:52:39.040000             🧑  作者: Mango

如何在Android Studio中查看和定位领域数据库?

在Android应用的开发过程中,经常会用到领域数据库,包括SQLite和Room等。在调试过程中,我们需要查看和定位数据库中的数据,以帮助我们快速排查问题。本文将介绍如何在Android Studio中查看和定位领域数据库。

查看SQLite数据库
导入Stetho库

Stetho是Facebook开源的一个Android库,可以帮助我们在Chrome中查看Android应用中的SQLite数据库。在项目的build.gradle中添加如下依赖:

dependencies {
    // ...
    debugImplementation 'com.facebook.stetho:stetho:1.5.1'
    releaseImplementation 'com.facebook.stetho:stetho-no-op:1.5.1'
}
初始化Stetho

在Application中初始化Stetho,代码如下:

import com.facebook.stetho.Stetho

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Stetho.initializeWithDefaults(this)
    }
}
在Chrome中查看SQLite数据库

在Chrome中打开chrome://inspect/#devices,选择设备和应用,并点击Inspect进入DevTools。在DevTools的Application面板中,选择左侧的Storage-Web SQL,即可看到应用中的SQLite数据库。展开数据库名字,可以看到表的列表,点击表的名称,可以看到表中的数据。

sqlite_database

查看Room数据库
导入Stetho库

虽然Stetho是专门为SQLite而设计的,但是它同样可以用于Room。需要导入另外一个库:

dependencies {
    // ...
    debugImplementation 'com.facebook.stetho:stetho-room:1.5.1'
}
初始化Stetho

在Application中初始化Stetho,代码如下:

import com.facebook.stetho.Stetho
import com.facebook.stetho.okhttp3.StethoInterceptor

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        Stetho.initializeWithDefaults(this)

        // 添加网络拦截器
        OkHttpClient.Builder()
            .addNetworkInterceptor(StethoInterceptor())
            .build()
    }
}
在Chrome中查看Room数据库

与SQLite不同的是,Room数据库没有直接的入口可以进入DevTools查看。需要在Chrome的Console中执行以下代码:

// 导入Stetho
var stetho = require('stetho/js/stetho-toplevel');
// 打开数据库
var database = await stetho.getDatabase({databaseId: 'your_database_id'});
// 执行SQL语句
var results = await stetho.executeSql({databaseId: database.databaseId, query: 'SELECT * FROM your_table_name'});
console.table(results);

其中,databaseId可以在DevTools的Console面板中看到。

room_database_id

总结

通过Stetho,我们可以方便地在Chrome中查看和定位Android应用中的领域数据库,大大提高了调试效率。