使用JsonStore在kivy android中保存变量
我想在kivy中为android应用程序保存一个变量(label.text),当应用程序重新启动时,它应该将变量加载回label.text 我尝试使用JsonStore保存变量 有没有更好的方法保存变量 但是当我运行代码时,我得到以下错误: ValueError:无法解码任何JSON对象 这是我的main.py文件:使用JsonStore在kivy android中保存变量,android,python,json,kivy,Android,Python,Json,Kivy,我想在kivy中为android应用程序保存一个变量(label.text),当应用程序重新启动时,它应该将变量加载回label.text 我尝试使用JsonStore保存变量 有没有更好的方法保存变量 但是当我运行代码时,我得到以下错误: ValueError:无法解码任何JSON对象 这是我的main.py文件: from kivy.app import App from kivy.storage.jsonstore import JsonStore from kivy.uix.boxlay
from kivy.app import App
from kivy.storage.jsonstore import JsonStore
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
class Test(BoxLayout):
Window.clearcolor = (1, 1, 1, 1)
def save(self):
store = JsonStore('hello.json')
store.put('tito', score=label.text)
class MyApp(App):
def build(self):
return Test()
def on_start(self):
store = JsonStore('hello.json')
label.text = store.get('tito')['score']
if __name__ == '__main__':
MyApp().run()
<Test>:
orientation: "vertical"
BoxLayout:
Label:
id: label
text: '0'
color: 0,0,0,1
pos: 250,200
size: 50,50
font_size:30
Button:
text: 'save'
on_release: root.save()
Button:
text: 'load'
on_release:
Button:
size_hint: 1, .5
text: 'click me'
on_press: label.text = str(int(label.text)+1)
这是我的我的.kv文件:
from kivy.app import App
from kivy.storage.jsonstore import JsonStore
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
class Test(BoxLayout):
Window.clearcolor = (1, 1, 1, 1)
def save(self):
store = JsonStore('hello.json')
store.put('tito', score=label.text)
class MyApp(App):
def build(self):
return Test()
def on_start(self):
store = JsonStore('hello.json')
label.text = store.get('tito')['score']
if __name__ == '__main__':
MyApp().run()
<Test>:
orientation: "vertical"
BoxLayout:
Label:
id: label
text: '0'
color: 0,0,0,1
pos: 250,200
size: 50,50
font_size:30
Button:
text: 'save'
on_release: root.save()
Button:
text: 'load'
on_release:
Button:
size_hint: 1, .5
text: 'click me'
on_press: label.text = str(int(label.text)+1)
:
方向:“垂直”
盒子布局:
标签:
id:标签
文本:“0”
颜色:0,0,0,1
邮政编码:250200
尺码:50,50
字体大小:30
按钮:
文本:“保存”
发布时:root.save()
按钮:
文本:“加载”
发布时:
按钮:
尺寸提示:1.5
文本:“单击我”
按:label.text=str(int(label.text)+1)
以下是完整的错误消息:
Traceback (most recent call last):
File "main.py", line 25, in <module>
MyApp().run()
File "/usr/lib/python2.7/dist-packages/kivy/app.py", line 823, in run
self.dispatch('on_start')
File "kivy/_event.pyx", line 699, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7394)
File "main.py", line 20, in on_start
store = JsonStore('hello.json')
File "/usr/lib/python2.7/dist-packages/kivy/storage/jsonstore.py", line 25, in __init__
super(JsonStore, self).__init__(**kwargs)
File "/usr/lib/python2.7/dist-packages/kivy/storage/__init__.py", line 133, in __init__
self.store_load()
File "/usr/lib/python2.7/dist-packages/kivy/storage/jsonstore.py", line 34, in store_load
self._data = loads(data)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
回溯(最近一次呼叫最后一次):
文件“main.py”,第25行,在
MyApp().run()
文件“/usr/lib/python2.7/dist-packages/kivy/app.py”,第823行,运行中
自我分派(“启动时”)
kivy.\u event.EventDispatcher.dispatch(kivy/\u event.c:7394)中第699行的文件“kivy/\u event.pyx”
文件“main.py”,第20行,在开始时
store=JsonStore('hello.json')
文件“/usr/lib/python2.7/dist packages/kivy/storage/jsonstore.py”,第25行,在__
超级(JsonStore,self)。\uuuuuuuuuuuuuuuuuuuuuu(**kwargs)
文件“/usr/lib/python2.7/dist packages/kivy/storage/_init__.py”,第133行,在_init中__
self.store_load()
文件“/usr/lib/python2.7/dist packages/kivy/storage/jsonstore.py”,第34行,店内加载
自身数据=负载(数据)
文件“/usr/lib/python2.7/json/_init__.py”,第339行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/python2.7/json/decoder.py”,第364行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
原始解码中的文件“/usr/lib/python2.7/json/decoder.py”,第382行
raise VALUERROR(“无法解码JSON对象”)
ValueError:无法解码任何JSON对象
提前感谢此错误有点通用,但您的JSON似乎无效。您的JSON应该类似于:
{"tito": {"score": "3"}}
您可以在Test
类中使用\uuuuu init\uuuu
方法在开始时加载Json,我认为在这种情况下,它比在开始时使用方法更简单
另一方面,在尝试获取JSON文件和密钥之前,需要测试它是否存在。否则,您可能是一个KeyError
异常。除此之外,您可以使用try
from kivy.app import App
from kivy.storage.jsonstore import JsonStore
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.properties import ObjectProperty
kv_text = '''\
<Test>:
orientation: "vertical"
label: label
BoxLayout:
Label:
id: label
text: '0'
color: 0,0,0,1
pos: 250,200
size: 50,50
font_size:30
Button:
text: 'save'
on_release: root.save()
Button:
text: 'load'
on_release: root.load()
Button:
size_hint: 1, .5
text: 'click me'
on_press: label.text = str(int(label.text)+1)
'''
class Test(BoxLayout):
label = ObjectProperty()
Window.clearcolor = (1, 1, 1, 1)
def __init__(self, **kwargs):
super(Test, self).__init__(**kwargs)
self.store = JsonStore('hello.json')
self.load()
def save(self):
self.store.put('tito', score= self.label.text)
def load(self):
try:
self.label.text = self.store.get('tito')['score']
except KeyError:
pass
class MyApp(App):
def build(self):
Builder.load_string(kv_text)
return Test()
if __name__ == '__main__':
MyApp().run()
从kivy.app导入应用
从kivy.storage.jsonstore导入jsonstore
从kivy.uix.boxlayout导入boxlayout
从kivy.core.window导入窗口
从kivy.lang导入生成器
从kivy.properties导入ObjectProperty
kv_文本=“”\
:
方向:“垂直”
标签:标签
盒子布局:
标签:
id:标签
文本:“0”
颜色:0,0,0,1
邮政编码:250200
尺码:50,50
字体大小:30
按钮:
文本:“保存”
发布时:root.save()
按钮:
文本:“加载”
发布时:root.load()
按钮:
尺寸提示:1.5
文本:“单击我”
按:label.text=str(int(label.text)+1)
'''
类别测试(BoxLayout):
label=ObjectProperty()
Window.clearcolor=(1,1,1,1)
定义初始(自我,**kwargs):
超级(测试,自我)。\uuuuu初始化(**kwargs)
self.store=JsonStore('hello.json')
self.load()
def保存(自我):
self.store.put('tito',score=self.label.text)
def加载(自):
尝试:
self.label.text=self.store.get('tito')['score']
除KeyError外:
通过
类别MyApp(应用程序):
def生成(自):
生成器.加载字符串(kv\U文本)
返回测试()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
MyApp().run()