上篇文章简要说明了UI的构建,这次来聊来怎么加载并且处理数据。
定位
打开一个天气app,你可能最想先看到的就是自己在的地方的天气了,所以你一定需要定位到你的所在地,然后查询你所在地的天气,加载给你看。那么问题来了,如何定位到自己的所在地呢?这里就需要用到强大的高德地图平台了。
进入到高德地图的开放平台,找到Android定位SDK,然后按照他的指示,执行以下的操作。
- 申请开发者账号
- 在控制台创建应用(这里你可能需要SHA,获得SHA的方法)
- 按照高德说的配置工程(导入jar包和配置AndroidManifest.xml文件)
- 运行定位代码(Android6.0以上要注意运行时权限哦)
获取天气数据
假设你已经定位成功了,那么只需要把获取的地理位置提交到天气数据服务器那里,就可以查询所在地的天气了。这里我推荐使用和风天气。也有以下几步。
- 申请开发者账号
- 查看文档调用服务器api
- 获取天气数据
处理并且显示数据
可能你发现了,和风天气的数据访问时通过url的。也就是说需要在android上通过url访问服务器才行。这里可以用HttpUrlConnetion,但是我觉得那东西不好使,所以我推荐使用okhttp。先去看看readme看看如何使用吧。
仔细想想看的话,我们是需要很多类型的数据的,肯定不止访问一次,而okhttp的使用每次代码的相近,只是url不同,那么大可把它封装成一个工具类
public class HttpUtils {
public static void sendRequest(String url, Callback callback) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
}
利用CallBack回调,在加载结束的时候做一些需要的操作。
Callback callback = new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//这里一定要注意是在子线程中,不是在主线程中,想刷新UI的话可以使用Handler
}
}
如果一切顺利的话,你应该已经看到了和风天气的数据,通过response.body().string获得。就是一大堆json数据
那么这段数据咋用呢?直接看肯定是看不懂得。。。这里就要来解析JSON数据了。这里可以使用JsonObject来解析,但是它同样不好使,尤其是json复杂的时候。这里推荐大家使用Gson工具。
Gson gson = new Gson();
Person person = gson.fromJson(str, Person.class);
Gson在这里是将json字符串给解析生成java的实体类。网上有很多的gson用法讲解,这里我也分享一下我的经验
-
大括号前面的第一个字段一定要成为一个类
json
比如这个,city是大括号前的第一个字段,写成一个类,下面的都是他的直接数据,没有大括号了,所以对应java的实体类应该这样
class City{
public String aqi;
public String co;
......
}
这里注意,如果你觉得aqi这个名字不好,想改别的,那么gson不会把aqi的数据解析上去,这时需要借助
class City{
@SerializedName("aqi")
public String dataAqi;
public String co;
......
}
这样就可以了
-
大括号里面还有大括号的话,里面的成为内部类就可以了
json
这里basic应该成为一个类,这没啥说的,update按理也要是一个类,那么作为basic的内部类就可以了
-
方括号前的字段要写成list
image.png
这里alarms就应该成为一个list,装的类是下面的数据,大括号前没有字段,这时可以自己随意定一个名字
List<Info> alarms;
class Info {
public String level;
.....
}
这些就是我自己解析json的经验啦。这里再给大家说一个工具GsonFormat,这个是针对上面的代码自动生成的工具,非常的强大。不过我建议大家还是自己写一些这样的解析,熟悉一些过程,再去使用这个工具。
到这里,数据和UI都没问题了,下一步就是APP具体的运行逻辑了,下一篇文章会写。如果能帮到你,不胜荣幸。