美文网首页
构建自己的天气APP(二)

构建自己的天气APP(二)

作者: BigTotoro | 来源:发表于2017-10-14 23:38 被阅读0次

      上篇文章简要说明了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具体的运行逻辑了,下一篇文章会写。如果能帮到你,不胜荣幸。

    相关文章

      网友评论

          本文标题:构建自己的天气APP(二)

          本文链接:https://www.haomeiwen.com/subject/mfofuxtx.html