动手实现天气预报App(一)——数据、工具类和碎片布局准备

本文介绍如何动手实现天气预报App的第一步,包括需求分析、数据来源、数据库和表的创建,以及碎片界面布局。使用郭神提供的API获取省市县数据,结合 LitePal管理数据库,创建省市县三个数据表,并编写工具类解析数据。同时,设计了碎片布局以展示全国的省市区数据,实现了手动刷新和城市切换功能。
摘要由CSDN通过智能技术生成


本系列记录一下跟随guolin大神学习的项目自己完成一个天气预报Android App.

需求分析

  1. 可以列出全国所有省市县
  2. 可以查看全国任意城市天气信息
  3. 可以自由切换城市,查看不同地区天气
  4. 有手动刷新和后台自动更新天气功能

数据来源

郭神提供的数据接口,包含全国省市县名称和编号信息:

省级单位:

http://guolin.tech/api/china

服务器会返回JSON格式数据

在这里插入图片描述

市级单位:在后面加上具体省份id即可

http://guolin.tech/api/china/16

在这里插入图片描述

县级单位以此类推:

http://guolin.tech/api/china/16/116

在这里插入图片描述

接着为了获取每个地区具体的天气情况需要注册和风天气的接口:
在这里插入图片描述

拿到自己App的API KEY

之后配合每个具体地区的weather_id即可查看天气信息,如:

http://guolin.tech/api/weathercityid=cn101190401&key=bc0418b57b2d4918819d3974ac1285d9

返回的数据如:

在这里插入图片描述

数据获取后接着做JSON解析工作即可。

创建数据库和表

第一阶段要做的就是创建好数据库和表,从而将服务器获取到的数据存储到本地。这里使用 LitePal来管理数据库。

首先创建目录结构 ,其中db包用于存放数据库模型相关的代码

gson包用于存放GSON模型相关的代码,

service包用于存放服务相关的代码

util包用于存放工具相关的代码。
在这里插入图片描述

添加相关依赖:
在这里插入图片描述

使用 LiteRal,可以用面向对象的思维来实现数据库相关操作,比如定义一个 Java bean,在Book类中我们定义了id、 author、 price、 pages、name这几个字段,并生成了相应的 getter和 setter方法。Book类就会对应数据库中的Book表,而类中的每一个字段分别对应了表中的每一个列,这就是对象关系映射最直观的体验。

在db下新建省市县三个bean来对应三张表,具体代码如下:

/**
 *省信息表
 */
public class Province  extends DataSupport {
   

    private  int id;//代号
    private String provinceName;//省名
    private int provinceCode;//省编号

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getProvinceName() {
   
        return provinceName;
    }

    public void setProvinceName(String provinceName) {
   
        this.provinceName = provinceName;
    }

    public int getProvinceCode() {
   
        return provinceCode;
    }

    public void setProvinceCode(int provinceCode) {
   
        this.provinceCode = provinceCode;
    }
}

LiteRal进行表管理操作时不需要模型类有任何的继承结构,但是进行CRUD操作时就不行了,
必须要继承自 DataSupport类才行,因此这里我们需要把继承结构给加上。

/**
 * 城市信息表
 */
public class City extends DataSupport {
   
    private int id; //字段
    private String cityName; //城市名称
    private int cityCode;   //城市代码
    private int provinceId;//城市所属省份编号


    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getCityName() {
   
        return cityName;
    }

    public void setCityName(String cityName) {
   
        this.cityName = cityName;
    }

    public int getCityCode() {
   
        return cityCode;
    }

    public void setCityCode(int cityCode) {
   
        this.cityCode = cityCode;
    }

    public int getProvinceId() {
   
        return provinceId;
    }

    public void setProvinceId(int provinceId) {
   
        this.provinceId = provinceId;
    }

}

/**
 * 地区/县信息表
 */
public class County extends DataSupport {
   
        private int id;
        private String countyName;//县名
        private String weatherId;//天气id
        private int cityId;//所属县ID

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getCountyName() {
   
        return countyName;
    }

    public void setCountyName(String countyName) {
   
        this.countyName = countyName;
    }

    public String getWeatherId() {
   
        return weatherId;
    }

    public void setWeatherId(String weatherId) {
   
        this.weatherId = weatherId;
    }

    public int getCityId() {
   
        return cityId;
    }

    public void setCityId(int cityId) {
   
        this.cityId = cityId;
    }
}

接下来需要配置``litepal.xml`

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value ="MyWeatherApp"/>
    <version value="1"/>
    <list>
        <mapping class="com.wz.myweatherapp.db.County"/>
        <mapping class="com.wz.myweatherapp.db.City"/>
        <mapping class="com.wz.myweatherapp.db.Province"/>
    </list>
</litepal>

其中,< dbname>标签用于指定数据库名,< version>标签用于指定数据库版本号,
标签用于指定所有的映射模型,我们稍后就会用到。

最后还需要再配置一下 LitePalApplication,修改 Androidmanifest xml中的代码,如下所示:

<manifest xmlns:android
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值