动手实现天气预报App(二)——显示天气信息

这篇博客介绍了如何在Android应用中实现天气信息的显示。通过解析JSON数据,利用GSON库解析天气信息,包括基本数据、空气质量、当前天气、建议和未来预报。同时,讲解了如何编写天气界面,将数据绑定到UI,实现点击地区跳转和加载背景图的功能,并进行了测试。
摘要由CSDN通过智能技术生成

显示天气信息

解析天气数据

首先,天气信息的形式是JSON,借助GSON来对天气信息进行解析。

数据的大致形式如下:
在这里插入图片描述

其中,除了状态status内容为字符串,其他5类中都再包含具体内容,故可以定义5个具体的类来描述他们。

basic

在这里插入图片描述

basic中,city表示城市名,id为城市对应的Weather_id,又包含一个update类,所以需要一个update类,里面包含一个字符串loc表示更新时间。按照此结构可以在gson下建立Basic类。
在这里插入图片描述

public class Basic  {
   
    //由于JSON中的一些字段可能不太适合直接作为Java字段来命名,因此这里使用了
    //@ SerializedName注解的方式来让JSON字段和Java字段之间建立映射关系
    @SerializedName("city")
    public String cityName;

    @SerializedName("id")
    public String weatherId;

    public Update update;
    public class Update{
   
        @SerializedName("loc")
        public String updateTime;
    }
}

aqi

其他几个类也类似

AQI表示空气质量
在这里插入图片描述

建立AQI类来对应JSON类:

public class AQI {
   
    public AQICity city;

    public class AQICity{
   
        public String aqi;
        public String pm25;
    }
}

now

now中包含当前温度和一个cond类来包含当前天气类别。

public class Now  {
   
    @SerializedName("tmp")
    public String tmp;
    @SerializedName("cond")
    public More More;
    public class More{
   
        @SerializedName("txt")
        public String info;

    }
}

suggestion

在这里插入图片描述

建议类中包含三个类,comf表示天气体感,cw表示洗车建议,sport表示运动建议

public class Suggestion {
   
    @SerializedName("comf")
    public Comfort comfort;
    @SerializedName("cw")
    public CarWash carWash;

    public Sport sport;
    public class Sport{
   
        @SerializedName("txt")
    public String info;

    }
    public class CarWash{
   
        @SerializedName("txt")
    public String info;
    }
    public class Comfort{
   
        @SerializedName("txt")
        public  String info;
    }
}

daily_forecast

这个类比较特殊,包含未来一周天气信息,由于每天的信息都是相同的,所以只需定义出单日的天气实体类即可,然后在使用时使用集合类封装即可。
在这里插入图片描述

/*
可以看到, daily forecast中包含的是一个数组,数组中的每一项都代表着未来一天的天
气信息。针对于这种情况,我们只需要定义出单日天气的实体类就可以了,然后在声明实体类引
用的时候使用集合类型来进行声明。

 */
public class Forecast {
   
        public String date;
        @SerializedName("cond")
        public More more;
        @SerializedName("tmp")
        public Temperature Temperature;
        public class Temperature{
   
            public String max;
            public String min;
        }
        public class More{
   
            @SerializedName("txt_d")
            public String info;
        }
}

weather

还需要一个总的实例类来将上面创建好的类整合起来。

/*
在 Weather类中,我们对 Basic、AQI、NoW、 Suggestion和 Forecast类进行了引用。其
中,由于 daily forecast中包含的是一个数组,因此这里使用了List集合来引用 Forecast类。

 */
public class Weather {
   
    /*
    另外,返回的天气数据中还会包含一项 status数据,成功返回ok,失败则会返回具体的原因,那
    么这里也需要添加一个对应的 status字段
    现在所有的GSON实体类都定义好了,接下来我们开始编写天气界面。
     */
    public String status;
    public Basic basic;
    public AQI aqi;
    public Now now;
    public Suggestion suggestion;

    @SerializedName("daily_forecast")
    public List<Forecast> mForecastList;
}

其中,由于daily_forecast中包含一个数组,因此使用了List集合来引用Forecast类。

编写天气界面

这部分没什么好总结的,接按照需要编写即可,注意的是由于界面比较复杂,所有可以分开编写xml文件然后汇总在界面中。

activity_weather.xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    >


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/bing_pic_img"
        android:scaleType="centerCrop"/>

    <ScrollView
        android:id="@+id/weather_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值