Я ищу способ сохранения настроек на устройстве Android от Kivy.Kivy and android sharedpreferences
Я нашел документацию Kivy, общую информацию, неопределенную в этой конкретной области. Он упоминает три метода (извините, не имеют достаточной репутацией, чтобы обеспечить clicable ссылки, относительные пути к kivy.org при условии, я был бы рад, если кто-то может исправить эти ссылки):
- [ Хранение] ./docs/api-kivy.storage.html#module-kivy.storage
- [Настройки] ./docs/api-kivy.uix.settings.html
- [Config] ./docs/api- kivy.config.html
В дополнение к этим, я знаю, что я мог хранить данные в файле, используя pickle или базу данных, но я бы хотел использовать специально sharedpreferences
или, по крайней мере, любое постоянное хранилище Android/Kivy.
Однако, мне не удалось найти сравнения или объяснения, как они отличаются друг от друга и как они используются. Может ли кто-нибудь пролить свет, уже использовал их?
На самом деле, я на 80% уверен, что ни один из этих методов не использует общие настройки Android, поэтому я думал об использовании jnius (4), и для этого я попытался (методы 1,2/3 ?, 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 "сбщ ошибки в", так что в теории они должны были работать, но второй запуск Я получаю те же ошибки. У меня кончились идеи, как взломать ее.
Почему вы сделали 'метод callback' в' метод build' ?? Или это просто проблема с отступом? – kiok46
@ kiok46 нет, это было закрытие, но я реорганизовал его как метод класса, проверил и ошибки сохранялись. –