构建自己的天气APP(二)

2017-10-14  本文已影响0人  BigTotoro

  上篇文章简要说明了UI的构建,这次来聊来怎么加载并且处理数据。

定位

  打开一个天气app,你可能最想先看到的就是自己在的地方的天气了,所以你一定需要定位到你的所在地,然后查询你所在地的天气,加载给你看。那么问题来了,如何定位到自己的所在地呢?这里就需要用到强大的高德地图平台了。
  进入到高德地图的开放平台,找到Android定位SDK,然后按照他的指示,执行以下的操作。

获取天气数据

  假设你已经定位成功了,那么只需要把获取的地理位置提交到天气数据服务器那里,就可以查询所在地的天气了。这里我推荐使用和风天气。也有以下几步。

处理并且显示数据

  可能你发现了,和风天气的数据访问时通过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用法讲解,这里我也分享一下我的经验

class City{
    public String aqi;
    public String co;
    ......
}

  这里注意,如果你觉得aqi这个名字不好,想改别的,那么gson不会把aqi的数据解析上去,这时需要借助

class City{
   @SerializedName("aqi")
    public String dataAqi;
    public String co;
    ......
}

  这样就可以了

   List<Info> alarms;

    class Info {
        public String level;
        .....
    }

  这些就是我自己解析json的经验啦。这里再给大家说一个工具GsonFormat,这个是针对上面的代码自动生成的工具,非常的强大。不过我建议大家还是自己写一些这样的解析,熟悉一些过程,再去使用这个工具。

  到这里,数据和UI都没问题了,下一步就是APP具体的运行逻辑了,下一篇文章会写。如果能帮到你,不胜荣幸。

上一篇 下一篇

猜你喜欢

热点阅读