我正在开发天气应用程序,所以我必须从某些API获取图标(如云)和其他信息。在这里,我使用 OpenWeatherMap API。 (这部分很简单)
但问题是,如果互联网不可用,那么我该如何显示以前的数据呢?
它可以从手机中的某些来源检索图标和数据,可能是 sqlite数据库,或JsonStore or DictStore或其他任何有效方式。
在sqlite中存储图像/图标真是太痛苦了,每次刷新应用程序时我都要不断更改图标。(因此,从数据库存储和检索不是一个好主意。)
我不知道如何在JsonStore / DictStore中保存图标/图像。 (可能是base64)
还找到了this链接但没有多大帮助。
欢迎任何建议或示例。
答案 0 :(得分:1)
虽然我没有尝试,但我认为你可以按照以下步骤来实现这一目标。
当您使用OpenWeatherMap API时,我假设您已经实现了一个名为getImage(String code)
的方法,该方法将返回byte []中的图标(如示例here中所述)。
答案 1 :(得分:1)
我自己想通了。这个答案是为了将来的参考。
我所做的是,将我从该API获得的所有数据(已经采用JSON格式)保存到json
文件中。
写入档案weather.json
import json
from urllib import urlopen
url = urlopen('http://api.openweathermap.org/data/2.5/forecast/daily?q={}&mode=json&units={}'.format(getname,temp_type)).read()
#where getname is the name of city.
#and temp_type is either C(Celsius) or F(Fahrenheit)
result = json.loads(url)
out_file = open("weather.json","w")
json.dump(result,self.out_file, indent=4)
#indent = 4, just to make it easy to read.
out_file.close()
并从文件weather.json
in_file = open("weather.json", "r")
result = json.load(self.in_file)
in_file.close()
对于我使用requests
模块并使用唯一名称保存每个图标的图标,每次用户进行新搜索或刷新应用程序时,文件都会自动更新并下载新图标,取而代之的是现有的。
import requests
conditions_image1 = "http://openweathermap.org/img/w/{}.png".format(result['list'][1]['weather'][0]['icon'])
#or whatever be the name of your image
response1 = requests.get(conditions_image1)
if response1.status_code == 200:
f = open("./icons/wc1.png", 'wb')
f.write(response1.content)
f.close()
同时我正在使用kivy
,所以我想提一下,你需要在json
文件中添加buildozer.spec
(因为你可能先在PC上试过)
source.include_exts = py,png,jpg,kv,atlas,json
答案 2 :(得分:0)
我真的会考虑在这种情况下使用托管数据库,结合使用Picasso(图像缓存),所以一旦从数据库收到图标,它就会被缓存并再次使用。也可以使用Sqlite但是存储图标会非常麻烦,因为你必须使用效率不高的blob