データの保存

2015/08/31

(書き途中です)

データの保存形式は自由にプログラミングすればよいと思うけど、ストレージ機能もある。

Storage — Kivy 1.9.2-dev0 documentation
http://kivy.org/docs/api-kivy.storage.html#module-kivy.storage

APIリファレンスによると保存できる形式は3つ

  • kivy.storage.dictstore.DictStore: use a python dict as a store
  • kivy.storage.jsonstore.JsonStore: use a JSON file as a store
  • kivy.storage.redistore.RedisStore: use a Redis database with redis-py

Storageについてはこっちのページ

問題はデータの形式ではなく、デバイスによって、保存権限がある場所が違うってとこで、どこに保存したらよいかが問題。

from kivy.storage.dictstore import DictStore

store = DictStore(filename)

さて、このfilenameが何にすればいいか・・・。とりあえずAndroid端末でアプリが操作できるフォルダは、アプリ固有のフォルダと決まっている。
今使っているNexus7では、/sdcard/パッケージ名/になっているけど、多分、端末によって違うんじゃないか? スマホの内臓HDDの場合、/data/data/パッケージ名/filesらしい。
Javaでそのまま開発する場合は、Context.getFilesDir()などの関数で、デバイスを意識することなく出来るっぽいが、Kivyの場合は?

Handle database in kivy android app
http://stackoverflow.com/questions/28056620/handle-database-in-kivy-android-app

ここの回答によれば、jniusというモジュールを使えば、getFilesDir()を呼び出せるらしい。
モジュールを増やすのは実行エラーの原因になるからあまりしたくはないけど、試してみます。

jniusのインストールを試みる

pip install jnius
  • pipが古いって怒られた。pip install -update pip
  • JDK_HOMEがないと怒られた。環境変数にJDK_HOMEを追加する
  • JRE_HOMEがないと怒られた。環境変数にJRE_HOMEを追加する
  • ビルドでエラー。MinGWのgcc.exeでのコンパイルが上手くいかないらしい。今ここ