赞
踩
weatherStateIcon.setBackgroundResource(R.mipmap.icon_201);
break;
case 205://强风/劲风
case 206://疾风
case 207://大风
weatherStateIcon.setBackgroundResource(R.mipmap.icon_205);//因为这几个状态的图标是一样的
break;
case 208://烈风
case 209://风暴
case 210://狂爆风
case 211://飓风
case 212://龙卷风
case 213://热带风暴
weatherStateIcon.setBackgroundResource(R.mipmap.icon_208);//因为这几个状态的图标是一样的
break;
case 300://阵雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_300);
break;
case 301://强阵雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_301);
break;
case 302://雷阵雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_302);
break;
case 303://强雷阵雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_303);
break;
case 304://雷阵雨伴有冰雹
weatherStateIcon.setBackgroundResource(R.mipmap.icon_304);
break;
case 305://小雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_305);
break;
case 306://中雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_306);
break;
case 307://大雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_307);
break;
case 308://极端降雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_312);
break;
case 309://毛毛雨/细雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_309);
break;
case 310://暴雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_310);
break;
case 311://大暴雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_311);
break;
case 312://特大暴雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_312);
break;
case 313://冻雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_313);
break;
case 314://小到中雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_306);
break;
case 315://中到大雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_307);
break;
case 316://大到暴雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_310);
break;
case 317://大暴雨到特大暴雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_312);
break;
case 399://雨
weatherStateIcon.setBackgroundResource(R.mipmap.icon_399);
break;
case 400://小雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_400);
break;
case 401://中雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_401);
break;
case 402://大雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_402);
break;
case 403://暴雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_403);
break;
case 404://雨夹雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_404);
break;
case 405://雨雪天气
weatherStateIcon.setBackgroundResource(R.mipmap.icon_405);
break;
case 406://阵雨夹雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_406);
break;
case 407://阵雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_407);
break;
case 408://小到中雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_408);
break;
case 409://中到大雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_409);
break;
case 410://大到暴雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_410);
break;
case 499://雪
weatherStateIcon.setBackgroundResource(R.mipmap.icon_499);
break;
case 500://薄雾
weatherStateIcon.setBackgroundResource(R.mipmap.icon_500);
break;
case 501://雾
weatherStateIcon.setBackgroundResource(R.mipmap.icon_501);
break;
case 502://霾
weatherStateIcon.setBackgroundResource(R.mipmap.icon_502);
break;
case 503://扬沙
weatherStateIcon.setBackgroundResource(R.mipmap.icon_503);
break;
case 504://扬沙
weatherStateIcon.setBackgroundResource(R.mipmap.icon_504);
break;
case 507://沙尘暴
weatherStateIcon.setBackgroundResource(R.mipmap.icon_507);
break;
case 508://强沙尘暴
weatherStateIcon.setBackgroundResource(R.mipmap.icon_508);
break;
case 509://浓雾
case 510://强浓雾
case 514://大雾
case 515://特强浓雾
weatherStateIcon.setBackgroundResource(R.mipmap.icon_509);
break;
case 511://中度霾
weatherStateIcon.setBackgroundResource(R.mipmap.icon_511);
break;
case 512://重度霾
weatherStateIcon.setBackgroundResource(R.mipmap.icon_512);
break;
case 513://严重霾
weatherStateIcon.setBackgroundResource(R.mipmap.icon_513);
break;
case 900://热
weatherStateIcon.setBackgroundResource(R.mipmap.icon_900);
break;
case 901://冷
weatherStateIcon.setBackgroundResource(R.mipmap.icon_901);
break;
case 999://未知
weatherStateIcon.setBackgroundResource(R.mipmap.icon_999);
break;
}
}
}
WeatherForecastAdapter.java中做判断显示图标,代码如下:
package com.llw.goodweather.adapter;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.llw.goodweather.R;
import com.llw.goodweather.bean.WeatherForecastResponse;
import com.llw.goodweather.utils.WeatherUtil;
import java.util.List;
/**
*/
public class WeatherForecastAdapter extends BaseQuickAdapter<WeatherForecastResponse.HeWeather6Bean.DailyForecastBean, BaseViewHolder> {
public WeatherForecastAdapter(int layoutResId, @Nullable List<WeatherForecastResponse.HeWeather6Bean.DailyForecastBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, WeatherForecastResponse.HeWeather6Bean.DailyForecastBean item) {
helper.setText(R.id.tv_date, item.getDate())//日期
// .setText(R.id.tv_info, item.getCond_txt_d())//天气
.setText(R.id.tv_low_and_height, item.getTmp_min() + “/” + item.getTmp_max() + “℃”);//最低温和最高温
//天气状态图片
ImageView weatherStateIcon = helper.getView(R.id.iv_weather_state);
int code = Integer.parseInt(item.getCond_code_d());//获取天气状态码,根据状态码来显示图标
WeatherUtil.changeIcon(weatherStateIcon,code);//调用工具类中写好的方法
}
}
因为写作过程中,还有其他事情,所以并不是一蹴而就的,当我写适配器代码的时候就我的邮箱就已经收到通过审核的短信了,你如果没有收到也不要着急,只要资料没有问题,审核还是蛮快的,关键看审核的人员那个时候有没有帮你审核。现在我成为一个认证开发者了,那么可以直接运行一下。
再切换一个城市
从这个运行的效果图来看,完成了两件事,第一个就是未来七天的天气预报,这个只要你通过了审核,成为开发者,返回的数据自然就变成7天的,第二个就是UI优化,感觉图标显示还是比文字显示更好一些,这个就属于细节优化问题了,因为这个细节,你还是要做很多准备工作的。
https://free-api.heweather.net/s6/weather/hourly?location=%E7%A6%8F%E7%94%B0&key=3086e91d66c04ce588a7f538f917c7f4
访问测试地址,请以自己的Key去访问,返回的结果
在bean包下创建一个HourlyResponse.java,里面的代码如下:
package com.llw.goodweather.bean;
import java.util.List;
public class HourlyResponse {
private List HeWeather6;
public List getHeWeather6() {
return HeWeather6;
}
public void setHeWeather6(List HeWeather6) {
this.HeWeather6 = HeWeather6;
}
public static class HeWeather6Bean {
/**
basic : {“cid”:“CN101280603”,“location”:“福田”,“parent_city”:“深圳”,“admin_area”:“广东”,“cnty”:“中国”,“lat”:“22.5410099”,“lon”:“114.05095673”,“tz”:“+8.00”}
update : {“loc”:“2020-04-28 19:56”,“utc”:“2020-04-28 11:56”}
status : ok
hourly : [{“cloud”:“43”,“cond_code”:“101”,“cond_txt”:“多云”,“dew”:“19”,“hum”:“71”,“pop”:“0”,“pres”:“1010”,“time”:“2020-04-28 22:00”,“tmp”:“23”,“wind_deg”:“82”,“wind_dir”:“东风”,“wind_sc”:“1-2”,“wind_spd”:“2”},{“cloud”:“35”,“cond_code”:“100”,“cond_txt”:“晴”,“dew”:“18”,“hum”:“74”,“pop”:“0”,“pres”:“1011”,“time”:“2020-04-29 01:00”,“tmp”:“22”,“wind_deg”:“14”,“wind_dir”:“东北风”,“wind_sc”:“1-2”,“wind_spd”:“11”},{“cloud”:“69”,“cond_code”:“100”,“cond_txt”:“晴”,“dew”:“18”,“hum”:“72”,“pop”:“0”,“pres”:“1011”,“time”:“2020-04-29 04:00”,“tmp”:“21”,“wind_deg”:“43”,“wind_dir”:“东北风”,“wind_sc”:“1-2”,“wind_spd”:“4”},{“cloud”:“90”,“cond_code”:“101”,“cond_txt”:“多云”,“dew”:“19”,“hum”:“62”,“pop”:“0”,“pres”:“1008”,“time”:“2020-04-29 07:00”,“tmp”:“21”,“wind_deg”:“53”,“wind_dir”:“东北风”,“wind_sc”:“1-2”,“wind_spd”:“9”},{“cloud”:“91”,“cond_code”:“101”,“cond_txt”:“多云”,“dew”:“19”,“hum”:“58”,“pop”:“0”,“pres”:“1008”,“time”:“2020-04-29 10:00”,“tmp”:“27”,“wind_deg”:“45”,“wind_dir”:“东北风”,“wind_sc”:“1-2”,“wind_spd”:“10”},{“cloud”:“75”,“cond_code”:“101”,“cond_txt”:“多云”,“dew”:“18”,“hum”:“59”,“pop”:“0”,“pres”:“1009”,“time”:“2020-04-29 13:00”,“tmp”:“29”,“wind_deg”:“32”,“wind_dir”:“东北风”,“wind_sc”:“1-2”,“wind_spd”:“4”},{“cloud”:“59”,“cond_code”:“100”,“cond_txt”:“晴”,“dew”:“18”,“hum”:“60”,“pop”:“0”,“pres”:“1009”,“time”:“2020-04-29 16:00”,“tmp”:“27”,“wind_deg”:“50”,“wind_dir”:“东北风”,“wind_sc”:“1-2”,“wind_spd”:“6”},{“cloud”:“37”,“cond_code”:“101”,“cond_txt”:“多云”,“dew”:“19”,“hum”:“61”,“pop”:“0”,“pres”:“1008”,“time”:“2020-04-29 19:00”,“tmp”:“26”,“wind_deg”:“-1”,“wind_dir”:“无持续风向”,“wind_sc”:“1-2”,“wind_spd”:“2”}]
*/
private BasicBean basic;
private UpdateBean update;
private String status;
private List hourly;
public BasicBean getBasic() {
return basic;
}
public void setBasic(BasicBean basic) {
this.basic = basic;
}
public UpdateBean getUpdate() {
return update;
}
public void setUpdate(UpdateBean update) {
this.update = update;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List getHourly() {
return hourly;
}
public void setHourly(List hourly) {
this.hourly = hourly;
}
public static class BasicBean {
/**
cid : CN101280603
location : 福田
parent_city : 深圳
admin_area : 广东
cnty : 中国
lat : 22.5410099
lon : 114.05095673
tz : +8.00
*/
private String cid;
private String location;
private String parent_city;
private String admin_area;
private String cnty;
private String lat;
private String lon;
private String tz;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getParent_city() {
return parent_city;
}
public void setParent_city(String parent_city) {
this.parent_city = parent_city;
}
public String getAdmin_area() {
return admin_area;
}
public void setAdmin_area(String admin_area) {
this.admin_area = admin_area;
}
public String getCnty() {
return cnty;
}
public void setCnty(String cnty) {
this.cnty = cnty;
}
public String getLat() {
return lat;
}
public void setLat(String lat) {
this.lat = lat;
}
public String getLon() {
return lon;
}
public void setLon(String lon) {
this.lon = lon;
}
public String getTz() {
return tz;
}
public void setTz(String tz) {
this.tz = tz;
}
}
public static class UpdateBean {
/**
loc : 2020-04-28 19:56
utc : 2020-04-28 11:56
*/
private String loc;
private String utc;
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public String getUtc() {
return utc;
}
public void setUtc(String utc) {
this.utc = utc;
}
}
public static class HourlyBean {
/**
cloud : 43
cond_code : 101
cond_txt : 多云
dew : 19
hum : 71
pop : 0
pres : 1010
time : 2020-04-28 22:00
tmp : 23
wind_deg : 82
wind_dir : 东风
wind_sc : 1-2
wind_spd : 2
*/
private String cloud;
private String cond_code;
private String cond_txt;
private String dew;
private String hum;
private String pop;
private String pres;
private String time;
private String tmp;
private String wind_deg;
private String wind_dir;
private String wind_sc;
private String wind_spd;
public String getCloud() {
return cloud;
}
public void setCloud(String cloud) {
this.cloud = cloud;
}
public String getCond_code() {
return cond_code;
}
public void setCond_code(String cond_code) {
this.cond_code = cond_code;
}
public String getCond_txt() {
return cond_txt;
}
public void setCond_txt(String cond_txt) {
this.cond_txt = cond_txt;
}
public String getDew() {
return dew;
}
public void setDew(String dew) {
this.dew = dew;
}
public String getHum() {
return hum;
}
public void setHum(String hum) {
this.hum = hum;
}
public String getPop() {
return pop;
}
public void setPop(String pop) {
this.pop = pop;
}
public String getPres() {
return pres;
}
public void setPres(String pres) {
this.pres = pres;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getTmp() {
return tmp;
}
public void setTmp(String tmp) {
this.tmp = tmp;
}
public String getWind_deg() {
return wind_deg;
}
public void setWind_deg(String wind_deg) {
this.wind_deg = wind_deg;
}
public String getWind_dir() {
return wind_dir;
}
public void setWind_dir(String wind_dir) {
this.wind_dir = wind_dir;
}
public String getWind_sc() {
return wind_sc;
}
public void setWind_sc(String wind_sc) {
this.wind_sc = wind_sc;
}
public String getWind_spd() {
return wind_spd;
}
public void setWind_spd(String wind_spd) {
this.wind_spd = wind_spd;
}
}
}
}
页面渲染的数据从这些返回实体里面取,下一步,创建接口,打开ApiService.java
在里面增加
注意Key用自己的,然后创建订阅,打开WeatherContract.java
订阅方法
/**
逐小时预报
@param context
@param location
*/
public void hourly(final Context context,String location){
ApiService service = ServiceGenerator.createService(ApiService.class,0);
service.getHourly(location).enqueue(new NetCallBack() {
@Override
public void onSuccess(Call call, Response response) {
if(getView() != null){
getView().getHourlyResult(response);
}
}
@Override
public void onFailed() {
if(getView() != null){
getView().getDataFailed();
}
}
});
}
接口返回值
//查询逐小时天气的数据返回
void getHourlyResult(Response response);
接下来就是MainActivity.java
代码如下:
//逐小时天气预报返回
@Override
public void getHourlyResult(Response response) {
dismissLoadingDialog();//关闭弹窗
if ((“ok”).equals(response.body().getHeWeather6().get(0).getStatus())) {
} else {
ToastUtils.showShortToast(context, response.body().getHeWeather6().get(0).getStatus());
}
}
需要在三个地方进行请求,拿到定位之后、下拉的时候、切换城市之后
通过断点查看到了返回的数据,这一步你可以跳过,不会有什么影响,往下走
现在数据已经拿到了,接下来就是数据的渲染了,依然使用列表来做显示,这里我们用横向的列表,摆放的位置就放在7天天气预报的上方,这样会比较合理。
接下来在layout下创建一个item_weather_hourly_list.xml文件,
这就是每一个item的显示效果,只不过背景是无色的,这里之所以放黑色背景,是在写布局的时候易于调整。
item_weather_hourly_list.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:orientation=“vertical”
android:gravity=“center_horizontal”
android:padding=“8dp”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”>
<TextView
android:id=“@+id/tv_time”
android:textColor=“#FFF”
android:text=“上午10:00”
android:textSize=“14sp”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”/>
<ImageView
android:layout_marginTop=“12dp”
android:layout_marginBottom=“8dp”
android:id=“@+id/iv_weather_state”
android:background=“@mipmap/icon_100”
android:layout_width=“30dp”
android:layout_height=“30dp”/>
<TextView
android:textSize=“20sp”
android:id=“@+id/tv_temperature”
android:textColor=“#FFF”
android:text=“25℃”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”/>
然后在WeatherUtil.java中再增加一个方法showTimeInfo
/**
根据传入的时间显示时间段描述信息
@param timeData
@return
*/
public static String showTimeInfo(String timeData){
String timeInfo = null;
int time = 0;
time = Integer.parseInt(timeData.trim().substring(0,2));
if (time >= 0 && time <= 6) {
timeInfo = “凌晨”;
}else if (time > 6 && time <= 12) {
timeInfo = “上午”;
}else if (time > 12 && time <= 13) {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。
Android学习的系统对应视频
Android进阶的系统对应学习资料
好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。
6 && time <= 12) {
timeInfo = “上午”;
}else if (time > 12 && time <= 13) {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-Vr4Qo7ow-1712154846222)]
[外链图片转存中…(img-O8uGTZi6-1712154846223)]
[外链图片转存中…(img-Rga1qprO-1712154846223)]
[外链图片转存中…(img-BFDAuv0u-1712154846223)]
[外链图片转存中…(img-V4XSma7Y-1712154846224)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。
[外链图片转存中…(img-zqn3en2M-1712154846224)]
[外链图片转存中…(img-wwfhah6L-1712154846225)]
Android学习的系统对应视频
Android进阶的系统对应学习资料
[外链图片转存中…(img-Tix9rNmC-1712154846225)]
[外链图片转存中…(img-n5WbY3OP-1712154846225)]
好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。