Android開発で地味に役立つ小技
こんにちは。開発担当のオオタです。Android版TOLOTアプリの開発中で、こんな機能があれば便利だなと思ったものを作ったところ、意外と役に立ったので、せっかくなので紹介したいと思います。
Androidアプリ内でデータをSQLite上に保存する機能を実装すると思うのですが、開発時には、テーブルの定義情報、そして現在テーブルに格納されているデータの中身を確認したいという場面がよく発生します。
実際には、以下のような感じで adb shell コマンドと SQLite の SELECT 文や PRAGMA 文を組み合わせると確認することはできます。
$ adb shell # cd /data/data/com.tolot.sample/databases # sqlite3 users.db sqlite> select * from users; sqlite> pragma table_info(users);が、コマンドを入力するのが面倒な上に、エミュレータ上でしか確認できません。
実機でも簡単な操作でそれらの情報が確認できたら便利だよねというところから発展して作られていきました。
例えば、テーブルの定義情報の参照機能であれば、以下のような形で実装してみました。
public class UserDatabase extends SQLiteOpenHelper { // (snip) @Override public void onCreate(SQLiteDatabase db) { db.beginTransaction(); try { db.execSQL("CREATE TABLE users (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "code TEXT NOT NULL, " + "name TEXT NOT NULL, " + "age INTEGER " + ");"); db.setTransactionSuccessful(); } finally { db.endTransaction(); } } public class ColumnInfo { public long cid; public String name; public String type; public long notnull; public String defaultValue; public long pk; } public ArrayList<Columninfo> getColumns(SQLiteDatabase db, String tableName) { ArrayList<Columninfo> columns = new ArrayList<Columninfo>(); Cursor cursor = db.rawQuery("PRAGMA table_info(" + tableName + ")", null); if (cursor != null) { try { if (cursor.moveToFirst()) { do { ColumnInfo column = new ColumnInfo(); column.cid = cursor.getLong(0); column.name = cursor.getString(1); column.type = cursor.getString(2); column.notnull = cursor.getLong(3); column.defaultValue = cursor.getString(4); column.pk = cursor.getLong(5); columns.add(column); } while(cursor.moveToNext()); } } finally { cursor.close(); } } return columns; } }以下のスクリーンショットのような形で、テーブル定義情報を確認できます(例えば、定義変更を行った場合の確認に使います)。
もちろん、開発時のみ特定の操作を行った場合のみ使える機能になっています。
こういう便利な機能があることで、ちょっとした操作だけで簡単に確認できるのは嬉しいですよね。上記は、あくまで1例ですが、チームメンバーがより円滑に開発が進められるような機能を実装したりもします。