Android 天气APP(二十三)增加灾害预警、优化主页面UI

在这里插入图片描述


前言

===============================================================

天气预报光有普通天气总感觉好少了点什么,所以和风天气给补上了,那就是灾害天气的预警,灾害预警API可以获取指定城市的极端天气预警数据。


一、灾害预警

===================================================================

首先当然是从API下手了。测试API地址如下:

https://devapi.heweather.net/v7/warning/now?key=3086e91d66c04ce588a7f538f917c7f4&location=101200106

随便打开一个网页,复制进去回车你就能拿到返回数据,还是比较简单的。

在这里插入图片描述

1.数据实体


通过这些数据生成一个实体bean,在app的bean包下新建一个WarningResponse

在这里插入图片描述

代码如下:

package com.llw.goodweather.bean;

import java.util.List;

public class WarningResponse {

/**

  • code : 200

  • updateTime : 2020-08-14T10:10+08:00

  • fxLink : http://hfx.link/2fh5

  • warning : [{“id”:“23062241600000_20200813132751”,“sender”:“肇源县气象局”,“pubTime”:“2020-08-13T13:28+08:00”,“title”:“肇源县气象局发布大风蓝色预警[IV级/一般]”,“startTime”:“2020-08-13T13:30+08:00”,“endTime”:“2020-08-14T13:30+08:00”,“status”:“active”,“level”:“蓝色”,“type”:“11B06”,“typeName”:“大风”,“text”:“肇源县气象台2020年8月13日13时28分发布大风蓝色预警信号:预计未来24小时肇源县受大风影响,平均风力可达5-6级,阵风可达7-8级,请有关单位和个人注意做好预防工作。防御指南:1.政府及相关部门按照职责做好防大风工作;2.关好门窗,加固围板、棚架、广告牌等易被风吹动的搭建物,妥善安置易受大风影响的室外物品,遮盖建筑物资;3.行人注意尽量少骑自行车,刮风时不要在广告牌、临时搭建物等下面逗留;4.有关部门和单位请注意森林、草原防火等防火,个人请注意室外和野外用火安全。             “,“related”:””}]

  • refer : {“sources”:[“12379”,“Weather China”],“license”:[“no commercial use”]}

*/

private String code;

private String updateTime;

private String fxLink;

private ReferBean refer;

private List warning;

public String getCode() {

return code;

}

public void setCode(String code) {

this.code = code;

}

public String getUpdateTime() {

return updateTime;

}

public void setUpdateTime(String updateTime) {

this.updateTime = updateTime;

}

public String getFxLink() {

return fxLink;

}

public void setFxLink(String fxLink) {

this.fxLink = fxLink;

}

public ReferBean getRefer() {

return refer;

}

public void setRefer(ReferBean refer) {

this.refer = refer;

}

public List getWarning() {

return warning;

}

public void setWarning(List warning) {

this.warning = warning;

}

public static class ReferBean {

private List sources;

private List license;

public List getSources() {

return sources;

}

public void setSources(List sources) {

this.sources = sources;

}

public List getLicense() {

return license;

}

public void setLicense(List license) {

this.license = license;

}

}

public static class WarningBean {

/**

  • id : 23062241600000_20200813132751

  • sender : 肇源县气象局

  • pubTime : 2020-08-13T13:28+08:00

  • title : 肇源县气象局发布大风蓝色预警[IV级/一般]

  • startTime : 2020-08-13T13:30+08:00

  • endTime : 2020-08-14T13:30+08:00

  • status : active

  • level : 蓝色

  • type : 11B06

  • typeName : 大风

  • text : 肇源县气象台2020年8月13日13时28分发布大风蓝色预警信号:预计未来24小时肇源县受大风影响,平均风力可达5-6级,阵风可达7-8级,请有关单位和个人注意做好预防工作。防御指南:1.政府及相关部门按照职责做好防大风工作;2.关好门窗,加固围板、棚架、广告牌等易被风吹动的搭建物,妥善安置易受大风影响的室外物品,遮盖建筑物资;3.行人注意尽量少骑自行车,刮风时不要在广告牌、临时搭建物等下面逗留;4.有关部门和单位请注意森林、草原防火等防火,个人请注意室外和野外用火安全。

  • related :

*/

private String id;

private String sender;

private String pubTime;

private String title;

private String startTime;

private String endTime;

private String status;

private String level;

private String type;

private String typeName;

private String text;

private String related;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getSender() {

return sender;

}

public void setSender(String sender) {

this.sender = sender;

}

public String getPubTime() {

return pubTime;

}

public void setPubTime(String pubTime) {

this.pubTime = pubTime;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getStartTime() {

return startTime;

}

public void setStartTime(String startTime) {

this.startTime = startTime;

}

public String getEndTime() {

return endTime;

}

public void setEndTime(String endTime) {

this.endTime = endTime;

}

public String getStatus() {

return status;

}

public void setStatus(String status) {

this.status = status;

}

public String getLevel() {

return level;

}

public void setLevel(String level) {

this.level = level;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public String getTypeName() {

return typeName;

}

public void setTypeName(String typeName) {

this.typeName = typeName;

}

public String getText() {

return text;

}

public void setText(String text) {

this.text = text;

}

public String getRelated() {

return related;

}

public void setRelated(String related) {

this.related = related;

}

}

}

2.新增API和方法


打开ApiService

在这里插入图片描述

新增了一个api接口,然后进入WeatherContract中,新增请求方法和返回

在这里插入图片描述

在这里插入图片描述

然后进入到MainActivity中增加

在这里插入图片描述

完成到这里,然后做数据的请求,在搜索城市的返回值中获取id,然后写入请求。

3.数据渲染


在这里插入图片描述

然后在返回的地方做数据的展示处理就可以了。先进入到activity_main.xml中,增加一个TextView,这个TextView做了一个简单的自定义修改,在mvplibrary下的view包下新建一个MarqueeTextView,然后继承TextView,代码如下:

package com.llw.mvplibrary.view;

import android.annotation.SuppressLint;

import android.content.Context;

import android.util.AttributeSet;

import android.widget.TextView;

import androidx.annotation.Nullable;

@SuppressLint(“AppCompatCustomView”)

public class MarqueeTextView extends TextView {

public MarqueeTextView(Context context) {

super(context);

}

public MarqueeTextView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

}

public MarqueeTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

public boolean isFocused() {

return true;

}

}

然后在布局中使用。

在这里插入图片描述

注意我放的位置,是在星期的上面,这个布局也要算在滑动的高度计算里面

<com.llw.mvplibrary.view.MarqueeTextView

android:id=“@+id/tv_warn”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginStart=“@dimen/dp_16”

android:layout_marginEnd=“@dimen/dp_16”

android:ellipsize=“marquee”

android:marqueeRepeatLimit=“marquee_forever”

android:paddingTop=“@dimen/dp_4”

android:paddingBottom=“@dimen/dp_4”

android:singleLine=“true”

android:textColor=“@color/white”

android:textSize=“@dimen/sp_12” />

android:marqueeRepeatLimit="marquee_forever"表示一直滚动

android:singleLine="true"表示单行

android:ellipsize="marquee"这里设置为超出文本后滚动显示

在MainActivity中声明

在这里插入图片描述

在返回值中做显示处理

在这里插入图片描述

这个灾害预警是存在没有数据的情况,所以没有数据的时候就隐藏掉这个TextView,这个我要说明一下不是所有城市都有灾害预警的,看你的运行了,如果没有数据你得到的返回就是这样的。

{

“code”: “200”,

“updateTime”: “2020-08-14T10:59+08:00”,

“fxLink”: “http://hfx.link/1u0z5”,

“warning”: [],

“refer”: {

“sources”: [

“12379”,

“Weather China”

],

“license”: [

“no commercial use”

]

}

}

这个我还特地问过和风那边是怎么回事,他们是这样回复我的。

如果你查询的城市预警信息返回为空,则代表这个城市当前没有预警信息。你也可以通过预警城市列表获得当前所有发生预警的城市id。即如果你想知道现在深圳市是否有预警,可以直接访问深圳市的预警信息,返回为空则当前无预警,或者访问预警城市列表,如果深圳城市id不在这个列表中,也代表当前深圳无预警。

他这里提到的预警城市列表,你可以用这个请求地址去获取,

https://devapi.heweather.net/v7/warning/list?range=cn&key=3086e91d66c04ce588a7f538f917c7f4

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

img

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

  • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
  • 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-OObqMDWn-1712769235563)]

最后

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

[外链图片转存中…(img-IbGHHtVN-1712769235563)]

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

  • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
  • 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-Q0PGwTV6-1712769235564)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值