I am creating an app that lets the user enter information and can save the data into a json file called hello.json. This works fine when the file exists, however when testing it on an android it crashed because it does not contain this file. How can I create a new json file on android if it doesn't exist?
.py file
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.graphics import Color, Rectangle
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import AsyncImage
from kivy.uix.label import Label
from kivy.properties import StringProperty, ListProperty
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.textinput import TextInput
from kivy.network.urlrequest import UrlRequest
from kivy.storage.jsonstore import JsonStore
from os.path import exists
from kivy.compat import iteritems
from kivy.storage import AbstractStore
from json import loads, dump
from kivy.config import Config
class Phone(FloatLayout):
def __init__(self, **kwargs):
# make sure we aren't overriding any important functionality
super(Phone, self).__init__(**kwargs)
with self.canvas.before:
Color(0, 1, 0, 1) # green; colors range from 0-1 instead of 0-255
self.rect = Rectangle(size=self.size, pos=self.pos)
self.bind(size=self._update_rect, pos=self._update_rect)
with open('hello.json') as inFile:
try:
data = Phone.load(self)
except KeyError:
data = []
def _update_rect(self, instance, value):
self.rect.pos = instance.pos
self.rect.size = instance.size
def product(self, instance):
self.result.text = str(float(self.w.text) * 703/ (float(self.h.text) * float(self.h.text)))
def save(self):
store = JsonStore('hello.json')
name = self.n.text
gender = self.g.text
dtype = self.t.text
height = self.h.text
weight = self.w.text
bmi = self.result.text
medications = self.m.text
insulin = self.ti.text
store.put('profile', name=name, gender=gender, dtype=dtype, height=height, weight=weight, bmi=bmi, medications=medications, insulin=insulin)
def load(self):
store = JsonStore('hello.json')
profile = store.get('profile')
self.n.text = profile['name']
self.g.text = profile['gender']
self.t.text = profile['dtype']
self.h.text = profile['height']
self.w.text = profile['weight']
self.result.text = profile['bmi']
self.m.text = profile['medications']
self.ti.text = profile['insulin']
try:
store.get('profile')['name']
except KeyError:
name = ""
else:
name = store.get('profile')['name']
presentation = Builder.load_file("main.kv")
class PhoneApp(App):
def build(self):
store = JsonStore('hello.json')
return Phone()
if __name__ == '__main__':
PhoneApp().run()
You should use with open('hello.json', 'a+') as inFile
a+ Opens a file for both appending and reading. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.