削除後の再インストールでも、TinyDBのデーターがリセットされない問題をChatGPTで解決
開発中アプリのアップデートで思わぬエラーが発生
開発中のアプリで、TinyDBの仕様を変更して上書きインストールをしたところ、再インストール前の仕様のデータが残っていて起動時にエラーが出た。
上書きインストールしてもデータは残ることはわかっていたが、DBの仕様を変更した場合は不便である。仕様が変わっているのでデータ削除の機能も働かない。
このための削除機能を追加するのも面倒なので、 アプリを一旦削除をしたらTinyDBも削除されデーターは残らなだろうと思い、アプリ削除後に新規インストールをしたが、結果は変わらず起動時にエラー。
TinyDBはアプリ固有のDBなに、これは仕様なのか?
ChatGPTに質問してみたら・・・
こんな時は、ChatGPTに質問してみるのも一つの手。
回答の要約は
・AppInventorの仕様です。削除されない場合があります。
・主な対応方法は以下4点
1. アンインストール時にデータを削除する
・ 設定 → アプリと通知 → 該当アプリ → ストレージとキャッシュ → ストレージを消去
2. アプリ内でTinyDBをクリアする
・ブロック TinyDB.plaintext を利用してクリアする
3. 異なる名前空間を使用する
・アプリをアップデートする際に、TinyDBのNamespaceプロパティを変更すると、以前のデータと新しいデータが分離されます。
4. 端末を初期化する
・最終手段として、端末を初期化することで完全にデータを削除できます。ただし、これは他のデータにも影響するため、慎重に行う必要があります
ChatGPT回答案の評価
4点の対策が回答されたが、それぞれを評価すると
2. アプリ内でTinyDBをクリアする は、プログラム変更が必要だなのでパス(説明のブロックにも誤りがある)
3. 異なる名前空間を使用する は、データが残ったままになるのでパス
4. 端末を初期化する は、最終手段でこの状況での採用はありえない
ということで、1. アンインストール時にデータを削除する を実施してみた。
データを削除する
実際にデータを削除したのが以下の手順(図1~図3)。ChatGPTの回答と若干違うが、データは削除され起動時のエラーは解消した。
<参考>ChatGPTとのやり取り詳細
ChatGPTとのやり取りは、少し長いがそのまま転記すると
<質問>
TinyDBを利用したアプリを仕様変更して、修正したところ、以前の仕様の時に入力したデータが残っていて、動作に影響が出ます。アプリを消して再インストールしましたが、データは残ったままです。これは仕様ですか?
<回答>
はい、これは仕様です。AndroidアプリでTinyDBを使用して保存されたデータは、アプリをアンインストールしても端末のローカルストレージに残る場合があります。このデータは、新しくインストールしたアプリが同じ名前空間(アプリケーションID)を使用すると再びアクセス可能になります。
理由
AndroidのSharedPreferences: TinyDBは内部的にAndroidのSharedPreferencesを使用してデータを保存します。SharedPreferencesに保存されたデータは、アプリをアンインストールしても完全には削除されない場合があります。
キャッシュの影響: 一部のデータは、端末のキャッシュに残る可能性もあります。
解決方法
以下の方法で、TinyDBに保存されたデータを確実に削除できます。
1. アンインストール時にデータを削除する
アプリの設定画面から、以下の手順でデータを削除してください。
設定 → アプリと通知 → 該当アプリ → ストレージとキャッシュ → ストレージを消去
これにより、アプリのすべてのデータが削除されます。
2. アプリ内でTinyDBをクリアする
アプリの起動時に、以下のコードを追加してデータをクリアします。
ブロック:
plaintext
これにより、以前のデータが残っている場合でもクリアできます。
3. 異なる名前空間を使用する
アプリをアップデートする際に、TinyDBのNamespaceプロパティを変更すると、以前のデータと新しいデータが分離されます。
4. 端末を初期化する
最終手段として、端末を初期化することで完全にデータを削除できます。ただし、これは他のデータにも影響するため、慎重に行う必要があります。
開発時の注意事項
データのバージョン管理: データにバージョン情報を持たせ、仕様変更時に古いデータを判定してクリアまたは変換するロジックを実装するのが理想的です。
一時的なデータ使用: アプリ終了時に不要なデータを削除する設計を検討してください。