美文网首页
构建自己的天气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(二)

      上篇文章简要说明了UI的构建,这次来聊来怎么加载并且处理数据。 定位   打开一个天气app,你可能最想先看到...

  • 构建自己天气APP(三)

    前面的文章讲了如何编写UI和处理数据。这是关于天气APP的最后一篇文章了,会着重讲解如何处理一个完整APP的逻辑运...

  • 构建自己的天气APP(一)

      学习android最大的快乐莫过于写自己的APP,并且分享给亲朋好友使用,所以想写这一些列的文章,来记述写一个...

  • CoolWeather

    构建数据库模型 因为是构建一个天气的APP,需要显示各地的天气,所以需要构建一个数据库模型存放省、市、县各级的数据...

  • Ionic 4 配置App icon 和splash

    构建App配置app icon 和 splash是必须的步骤,通过ionic 构建hybrid app 同样需要配...

  • BaseProject快速构建自己的APP

    关于BaseProject BaseProject是一个快速构建app工程的开源项目,目的是为了更加方便的初始化一...

  • iOS-APP 构建相似App多种方式整理

    iOS APP 构建相似App多种方式整理 利用Build Configuration来构建相似App原地址:iO...

  • Flutter Bug总结

    Problem 1.上传App Store构建版本,上传成功,App Store Connect并不显示构建版本?...

  • SwiftUI 精品App之使用 SwiftUI 构建的天气应用

    实战需求 SwiftUI 精品App之使用 SwiftUI 构建的天气应用程序 有一个自定义导航栏 获得了自定义扩...

  • 如何构建自己的知识体系之(二)

    如何构建自己的知识体系之(二) 我知识的获取路径: 微信公众号,微信读书,网易蜗牛读书,得到App,喜马拉雅/蜻蜓...

网友评论

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

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