[Android] Làm thế nào để debug Database và Shared Preferences trong Android?

Đăng bởi: Admin | Lượt xem: 41 | Chuyên mục: Android


Trong Android, khá là khó để xem những gì xảy ra với dữ liệu trong Database hay Shared Preferences khi người dùng tương tác với ứng dụng. Trong bài viết này mình sẽ giới thiệu một giải pháp để giải quyết vấn đề nan giải này.


1. Giới thiệu

Để giải quyết vấn đề nêu trên, chúng ta có thể sử dụng một thư viện đó là Android-Debug-Database của lập trình viên amitshekhariitbhu.

Các chức năng chính của thư viện: 

  • Xem tất cả databases.
  • Xem tất cả dữ liệu shared preferences sử dụng trong application.
  • Chạy tất cả query để update hoặc delete data.
  • Sửa trực tiếp giá trị các trường trong database shared preferences.
  • Xóa các row trong databases.
  • Search các dữ liệu bạn muốn.
  • Sắp xếp dữ liệu.
  • Export dữ liệu.
  • Kiểm tra phiên bản của database.
  • Download database

Đặc biệt thư viện này không yêu cầu thiết bị của bạn phải root để sử dụng.

2. Sử dụng

Thêm thư viện vào build.gradle

debugImplementation 'com.amitshekhar.android:debug-db:1.0.4'

Lấy địa chỉ debug

Sau khi thêm đoạn mã trên và chạy ứng dụng, nhìn vào logcat ta sẽ thấy đoạn log như dưới đây:

D/DebugDB: Open http://XXX.XXX.X.XXX:8080 in your browser

Ngoài ra bạn có thể lấy được địa chỉ debug bằng cách sử dụng method DebugDB.getAddressLog()

Chú ý: 

  • Hãy nhớ rằng khi bạn sử dụng debugImplementation, ứng dụng chỉ compile trên debug build nên khi bạn build release thì nhớ xóa nó đi nhé.
  • Điện thoại và máy tính của bạn phải sử dụng chung một mạng network. Hoặc nếu kết nối qua usb thì run command line sau:
adb forward tcp:8080 tcp:8080.

Debug file database bất kỳ

public static void setCustomDatabaseFiles(Context context) {
    if (BuildConfig.DEBUG) {
        try {
            Class<?> debugDB = Class.forName("com.amitshekhar.DebugDB");
            Class[] argTypes = new Class[]{HashMap.class};
            Method setCustomDatabaseFiles = debugDB.getMethod("setCustomDatabaseFiles", argTypes);
            HashMap<String, Pair<File, String>> customDatabaseFiles = new HashMap<>();
            // set your custom database files
            customDatabaseFiles.put(ExtTestDBHelper.DATABASE_NAME,
                    new Pair<>(new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME +
                                                    "/" + ExtTestDBHelper.DATABASE_NAME), ""));
            setCustomDatabaseFiles.invoke(null, customDatabaseFiles);
        } catch (Exception ignore) {

        }
    }
}

Debug inMemory Room database

public static void setInMemoryRoomDatabases(SupportSQLiteDatabase... database) {
    if (BuildConfig.DEBUG) {
        try {
            Class<?> debugDB = Class.forName("com.amitshekhar.DebugDB");
            Class[] argTypes = new Class[]{HashMap.class};
            HashMap<String, SupportSQLiteDatabase> inMemoryDatabases = new HashMap<>();
            // set your inMemory databases
            inMemoryDatabases.put("InMemoryOne.db", database[0]);
            Method setRoomInMemoryDatabase = debugDB.getMethod("setInMemoryRoomDatabases", argTypes);
            setRoomInMemoryDatabase.invoke(null, inMemoryDatabases);
        } catch (Exception ignore) {

        }
    }
}

Quan sát dữ liệu

Sửa các giá trị

3. Kết luận

Như đã thấy ở trên, việc debug database của bạn đã đơn giản hơn rất nhiều thay vì show log, debug ứng dụng v.vv... Có những việc tưởng chừng đơn giản nhưng tốn khá nhiều thời gian, công sức, vậy tại sao chúng ta không tìm cách giải quyết chúng nhanh hơn. Hy vọng bài viết đã giúp bạn biết debug database, shared preferences một cách đơn giản và dễ dàng hơn.

Cảm ơn các bạn đã đọc bài viết.

Chào thân ái và quyết thắng

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!