Kivy フレームワークから、Android デバイスに永続的に設定を保存する方法を探しています。
この特定の分野では、全体的に有益で曖昧なKivyのドキュメントが見つかりました。3つの方法について言及しています(申し訳ありませんが、クリック可能なリンクを提供するのに十分な評判がありません。kivy.orgへの相対パスが提供されています。誰かがそれらのリンクを修正できれば幸いです):
- [ストレージ] ./docs/api-kivy.storage.html#module-kivy.storage
- 【設定】 ./docs/api-kivy.uix.settings.html
- [構成] ./docs/api-kivy.config.html
sharedpreferences
それらに加えて、ピクルまたはデータベースを介してファイルにデータを保存できることを認識していますが、具体的には、または少なくとも Android/Kivy 固有の永続ストレージを使用したいと考えています。
ただし、比較や、それらの違いや使用方法の説明を見つけることができませんでした. すでにそれらを使用していた、誰かが光を当てることができますか?
実際、この方法のどちらも Android の共有設定を使用していないことは 80% 確信しているので、jnius (4) を使用することを考えました。簡単なハローワールドの例:
from kivy.app import App from kivy.uix.button import Button import jnius from kivy.config import Config from kivy.storage.dictstore import DictStore class MyApp(App): def build(self): path = "DEFAULT" try: path = Config.get('kivy', 'my_important_variable') print "\t\t\t KIVY 1:", Config.get('kivy', 'my_important_variable') except Exception as err: print ("KIVY, 1, error: {}".format(repr(err))) try: store = DictStore("MY_SETTINGS") path = store.get("my_important_variable") print "\t\t\t KIVY 2:", path except KeyError as err: print ("KIVY, 2, error: {}".format(repr(err))) try: prefs_m = jnius.autoclass('android.preference.PreferenceManager') prefs = prefs_m.getSharedPreferences() path = prefs.getString("my_important_variable", None) print "\t\t\t KIVY 3:", path except jnius.jnius.JavaException as err: print ("KIVY, 3, error: {}".format(repr(err))) btn1 = Button(text=path) btn1.bind(on_press=app.callback) # return btn1 def callback(self, instance): print('The button <%s> is being pressed, SAVING...' % instance.text) try: Config.set('kivy', 'my_important_variable', "my_value_1") except Exception as err: print ("KIVY, 4, error: {}".format(repr(err))) try: store = DictStore("MY_SETTINGS") store.put("MY_SETTINGS", my_important_variable="my_value_2") except Exception as err: print ("KIVY, 5, error: {}".format(repr(err))) try: prefs_c = jnius.autoclass('android.content.SharedPreferences') prefs_m = jnius.autoclass('android.preference.PreferenceManager') prefs = prefs_m.getSharedPreferences() prefs_e = prefs.Editor() prefs_e.putString("my_important_variable", "my_value_3") prefs_e.commit() except Exception as err: print ("KIVY, 6, error: {}".format(repr(err))) try: context = jnius.autoclass('android.content.Context') # do I actually get context or a class here? prefs = context.getPreferences(0).edit(); prefs.putString("my_important_variable", "my_value_4") prefs.commit() except Exception as err: print ("KIVY, 7, error: {}".format(repr(err))) if __name__ == '__main__': app = MyApp() app.run()
ここにlogcatの結果があります
... each time app is launched
I/python ( 5973): KIVY, 1, error: No option 'my_important_variable' in section: 'kivy'
I/python ( 5973): KIVY, 2, error: KeyError('my_important_variable',)
I/python ( 5973): KIVY, 3, error: JavaException('Unable to find a None method!',)
... button pressed
I/python ( 5973): The button <DEFAULT> is being pressed, SAVING...
I/python ( 5973): KIVY, 6, error: JavaException('Unable to find a None method!',)
I/python ( 5973): KIVY, 7, error: AttributeError("type object 'android.content.Context' has no attribute 'getPreferences'",)
4、5 の「エラーメッセージ」が呼び出されなかったことに注意してください。したがって、理論的には機能するはずですが、2 回目の起動でも同じエラーが発生します。私はそれをクラックする方法のアイデアを使い果たしました。