nsaito92 / Frock

0 stars 0 forks source link

アラーム設定のDB化対応 #7

Closed nsaito92 closed 4 years ago

nsaito92 commented 4 years ago

概要

期待値

対応内容

参考情報

備考

*

nsaito92 commented 4 years ago

アラーム設定のDB化対応やること

  1. 技術調査
    • AndroidにおけるDB対応方法を調査。
    • 調査結果をもって、要件を満たす見込みがあるか確認。
  2. 仮実装
    • 調査結果を持って仮実装。
    • 想定していた通りの挙動となるか確認。
      • データの保存、編集、削除
        • アラーム設定を作成して、DBに追加。
        • 追加した設定の編集及び、削除。
      • 永続化したデータの活用方法
        • アラームサービスに当て込む処理などの読み込み方法。
        • 永続化されているアラーム設定一覧の表示など、画面への表示。
  3. 仕様検討
    • 仮実装の結果をもって仕様の整理。
    • 細かい仕様検討を行う。
      • マイグレ
      • 性能要件
        • 何個までアラームの作成を可能とするか?
  4. 本実装
    • 仕様を検討した結果を持って、最終的なコード調整。
nsaito92 commented 4 years ago

DB構成検討

SQLiteOpenHelperを使用する

table「testdb」

以下の様な状態になっている。

--- title score
music1 10
music2 0
music3 0

DB対応案

--- status(INTEGER) hour(INTEGER) minute(INTEGER) week(TEXT) sound
1 21 00 0,1,2,3,4,5,6 ファイル1
0 09 00 5,6 ファイル3
1 08 00 4 ファイル5

見解

懸念点

nsaito92 commented 4 years ago

経過メモ

SQLiteOpenHelperの実装中。暫定デバッグ版として画面にDB内部の情報を出力する機能を追加する。

nsaito92 commented 4 years ago
12-23 00:17:59.956 16468-16468/? D/FrockSettingsOpenHelper: FrockSettingsOpenHelper
12-23 00:17:59.963 16468-16468/? D/FrockSettingsOpenHelper: onCreate
12-23 00:17:59.964 16468-16468/? D/FrockSettingsOpenHelper: saveData
12-23 00:17:59.964 16468-16468/? E/SQLiteLog: (1) table alarmsettingsdb has no column named week
12-23 00:17:59.965 16468-16468/? E/SQLiteDatabase: Error inserting week=0,1 hour=21 status=1 minute=0
                                                   android.database.sqlite.SQLiteException: table alarmsettingsdb has no column named week (code 1): , while compiling: INSERT INTO alarmsettingsdb(week,hour,status,minute) VALUES (?,?,?,?)
                                                       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:895)
                                                       at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:506)
                                                       at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                       at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                       at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                       at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1470)
                                                       at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
                                                       at com.example.naotosaito.clocktest.FrockSettingsOpenHelper.saveData(FrockSettingsOpenHelper.java:84)
                                                       at com.example.naotosaito.clocktest.FrockSettingsOpenHelper.onCreate(FrockSettingsOpenHelper.java:53)
                                                       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
                                                       at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
                                                       at com.example.naotosaito.clocktest.MainActivity.onCreate(MainActivity.java:32)
                                                       at android.app.Activity.performCreate(Activity.java:6705)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2664)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2772)
                                                       at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1515)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       at android.os.Looper.loop(Looper.java:241)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6223)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
MacBook-Pro:Downloads saito$ sqlite3 AppSettingsDB.db 
SQLite version 3.23.1 2018-04-10 17:39:29
Enter ".help" for usage hints.
sqlite> .tables
android_metadata
nsaito92 commented 4 years ago
  • 試験的にDB周り実装したところ、エラー

SQL文の半角スペース文ミスだった。 上記のエクセプションの場合は、SQL文法を見直すのが早そう。

nsaito92 commented 4 years ago

とりあえずtableは出来たので、試験データを入れた。

sqlite> .table
alarmsettingsdb   android_metadata
sqlite> select _id, status, hour, minute, week from alarmsettingsdb;
_id|status|hour|minute|week
1|1|21|0|0,1
2|0|11|45|2,4
3|0|12|0|0,1
sqlite> 
nsaito92 commented 4 years ago

経過メモ

DBのテストデータを元に、アラーム設定に投げ込む実装を検討中。

nsaito92 commented 4 years ago

経過メモ

以下の検討を引き続き行う。

アラームDB対応 対応範囲検討

  1. アラーム設定画面にて、DBのテストデータを元に、アプリ上に表示できる様にする。
    • まずは、一つ目の設定からで良い。
  2. アラーム設定画面にて、表示されてているデータを編集して、DBに保存できる様にする。
  3. TOP画面にて、DBのデータを元に現在のアラーム設定の一覧を表示できる様にする。
  4. TOP画面にて、任意のアラーム設定がタップされたら、選択されたアラーム設定の編集画面に遷移できる様にする。
  5. TOP画面で選択されたアラーム設定を、編集画面にて編集できる様にする。
  6. TOP画面にて、任意のアラーム設定画面を削除できる様にする。

別件?

  1. DBからアラーム設定したが、アラームが鳴動していない件の調査
    • 前述の対応が完了した後に、問題が発生するかどうか確認してから対応する。
nsaito92 commented 4 years ago

「2. アラーム設定画面にて、表示されてているデータを編集して、DBに保存できる様にする。」メモ

必要な技術

仕様について

nsaito92 commented 4 years ago

実装範囲が広いので、別タスクを切って対応する。