2024年人民银行面试题目及答案,Android 天气APP(7),阿里大牛整理

return air_now_city;

}

public void setAir_now_city(AirNowCityBean air_now_city) {

this.air_now_city = air_now_city;

}

public List getAir_now_station() {

return air_now_station;

}

public void setAir_now_station(List air_now_station) {

this.air_now_station = air_now_station;

}

public static class BasicBean {

/**

  • cid : CN101280601

  • location : 深圳

  • parent_city : 深圳

  • admin_area : 广东

  • cnty : 中国

  • lat : 22.54700089

  • lon : 114.08594513

  • 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-30 10:27

  • utc : 2020-04-30 02:27

*/

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 AirNowCityBean {

/**

  • aqi : 47

  • qlty : 优

  • main : -

  • pm25 : 23

  • pm10 : 47

  • no2 : 28

  • so2 : 7

  • co : 0.6

  • o3 : 95

  • pub_time : 2020-04-30 09:00

*/

private String aqi;

private String qlty;

private String main;

private String pm25;

private String pm10;

private String no2;

private String so2;

private String co;

private String o3;

private String pub_time;

public String getAqi() {

return aqi;

}

public void setAqi(String aqi) {

this.aqi = aqi;

}

public String getQlty() {

return qlty;

}

public void setQlty(String qlty) {

this.qlty = qlty;

}

public String getMain() {

return main;

}

public void setMain(String main) {

this.main = main;

}

public String getPm25() {

return pm25;

}

public void setPm25(String pm25) {

this.pm25 = pm25;

}

public String getPm10() {

return pm10;

}

public void setPm10(String pm10) {

this.pm10 = pm10;

}

public String getNo2() {

return no2;

}

public void setNo2(String no2) {

this.no2 = no2;

}

public String getSo2() {

return so2;

}

public void setSo2(String so2) {

this.so2 = so2;

}

public String getCo() {

return co;

}

public void setCo(String co) {

this.co = co;

}

public String getO3() {

return o3;

}

public void setO3(String o3) {

this.o3 = o3;

}

public String getPub_time() {

return pub_time;

}

public void setPub_time(String pub_time) {

this.pub_time = pub_time;

}

}

public static class AirNowStationBean {

/**

  • air_sta : 通心岭子站

  • aqi : 43

  • asid : CNA1356

  • co : 0.6

  • lat : 22.5545

  • lon : 114.1063

  • main : -

  • no2 : 10

  • o3 : 104

  • pm10 : 43

  • pm25 : 23

  • pub_time : 2020-04-30 09:00

  • qlty : 优

  • so2 : 7

*/

private String air_sta;

private String aqi;

private String asid;

private String co;

private String lat;

private String lon;

private String main;

private String no2;

private String o3;

private String pm10;

private String pm25;

private String pub_time;

private String qlty;

private String so2;

public String getAir_sta() {

return air_sta;

}

public void setAir_sta(String air_sta) {

this.air_sta = air_sta;

}

public String getAqi() {

return aqi;

}

public void setAqi(String aqi) {

this.aqi = aqi;

}

public String getAsid() {

return asid;

}

public void setAsid(String asid) {

this.asid = asid;

}

public String getCo() {

return co;

}

public void setCo(String co) {

this.co = co;

}

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 getMain() {

return main;

}

public void setMain(String main) {

this.main = main;

}

public String getNo2() {

return no2;

}

public void setNo2(String no2) {

this.no2 = no2;

}

public String getO3() {

return o3;

}

public void setO3(String o3) {

this.o3 = o3;

}

public String getPm10() {

return pm10;

}

public void setPm10(String pm10) {

this.pm10 = pm10;

}

public String getPm25() {

return pm25;

}

public void setPm25(String pm25) {

this.pm25 = pm25;

}

public String getPub_time() {

return pub_time;

}

public void setPub_time(String pub_time) {

this.pub_time = pub_time;

}

public String getQlty() {

return qlty;

}

public void setQlty(String qlty) {

this.qlty = qlty;

}

public String getSo2() {

return so2;

}

public void setSo2(String so2) {

this.so2 = so2;

}

}

}

}

这个实体Bean的有很多返回值,关键数据在AirNowCityBean,这个里面对应的参数名和描述在下面这张表里,写的时候注意一下就可以了

| 参数 | 描述 | 示例 |

| — | — | — |

| pub_time | 数据发布时间,格式yyyy-MM-dd HH:mm | 2017-03-20 12:30 |

| aqi | 空气质量指数,AQI和PM25的关系 | 74 |

| main | 主要污染物 | pm25 |

| qlty | 空气质量,取值范围:优,良,轻度污染,中度污染,重度污染,严重污染,查看计算方式 | 良 |

| pm10 | pm10 | 78 |

| pm25 | pm25 | 66 |

| no2 | 二氧化氮 | 40 |

| so2 | 二氧化硫 | 30 |

| co | 一氧化碳 | 33 |

| o3 | 臭氧 | 20 |

接下来就是写API接口了,打开ApiService.java,在里面增加

在这里插入图片描述

这一步相信你已经很熟悉了吧,我就不过多的解释了,继续往下走。

接下来打开WeatherContract.java,里面增加空气质量数据的订阅

/**

  • 空气质量数据

  • @param context

  • @param location

*/

public void airNowCity(final Context context,String location){

ApiService service = ServiceGenerator.createService(ApiService.class,0);

service.getAirNowCity(location).enqueue(new NetCallBack() {

@Override

public void onSuccess(Call call, Response response) {

if(getView() != null){

getView().getAirNowCityResult(response);

}

}

@Override

public void onFailed() {

if(getView() != null){

getView().getDataFailed();

}

}

});

}

//查询空气质量的数据返回

void getAirNowCityResult(Response response);

接下来是MainActivity.java

在这里插入图片描述

在定位返回的数据里面新增一个city的变量

在这里插入图片描述

然后有两个地方要进行赋值

①定位之后

在这里插入图片描述

②切换城市,点击市级列表的时候赋值

在这里插入图片描述

请求接口,修改三处地方,定位之后、下拉的时候、点击区/县的时候

在这里插入图片描述

在这里插入图片描述

修改activity_main.xml布局文件,放在七天天气预报的后面与风车的前面。

在修改布局之前,先自定义一个VIew,这个VIew并不是我自己写的,也是从网络上找的,只不过忘记出处了,因为这种东西网络上一大把,注释都在里面,其实就是一个圆环进度条,增加动画效果了,这种自定义View的代码和样式我都是放在mvplibrary下面的。

首先在style文件中创建样式

在这里插入图片描述

样式代码如下

然后创建这个View

在这里插入图片描述

代码如下:

package com.llw.mvplibrary.view;

import android.animation.ValueAnimator;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.RectF;

import android.util.AttributeSet;

import android.view.View;

import androidx.annotation.Nullable;

import com.llw.mvplibrary.R;

public class RoundProgressBar extends View {

private int mStrokeWidth = dp2px(8);//圆弧的宽度

private float mStartAngle = 135;//圆弧开始的角度

private float mAngleSize = 270;//起点角度和终点角度对应的夹角大小

private int mArcBgColor;//圆弧背景颜色

private float mMaxProgress;//最大的进度,用于计算进度与夹角的比例

private float mCurrentAngleSize;//当前进度对应的起点角度到当前进度角度夹角的大小

private float mCurrentProgress = 0;//当前进度

private long mDuration = 2000;//动画的执行时长

private int mProgressColor;//进度圆弧的颜色

private String mFirstText = “0”;//第一行文本

private int mFirstTextColor = Color.WHITE;//第一行文本的颜色

private float mFirstTextSize = 56f;//第一行文本的字体大小

private String mSecondText = " ";//第二行文本

private int mSecondTextColor = Color.WHITE;//第二行文本的颜色

private float mSecondTextSize = 56f;//第二行文本的字体大小

private String mMinText = “0”;//进度最小值

private int mMinTextColor = Color.WHITE;//最小值文本的颜色

private float mMinTextSize = 32f;//最小值字体大小

private String mMaxText = “0”;//进度最大值

private int mMaxTextColor = Color.WHITE;//最大值文本的颜色

private float mMaxTextSize = 32f;//最大值字体大小

public RoundProgressBar(Context context) {

super(context, null);

}

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

super(context, attrs, 0);

}

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

super(context, attrs, defStyleAttr);

initAttr(context, attrs);

}

/**

  • 设置初始化的参数

  • @param context

  • @param attrs

*/

private void initAttr(Context context, AttributeSet attrs) {

TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.RoundProgressBar);

mMaxProgress = array.getFloat(R.styleable.RoundProgressBar_round_max_progress, 500f);

mArcBgColor = array.getColor(R.styleable.RoundProgressBar_round_bg_color, Color.YELLOW);

mStrokeWidth = dp2px(array.getDimension(R.styleable.RoundProgressBar_round_stroke_width, 12f));

mCurrentProgress = array.getFloat(R.styleable.RoundProgressBar_round_progress, 300f);

mProgressColor = array.getColor(R.styleable.RoundProgressBar_round_progress_color, Color.RED);

mFirstText = array.getString(R.styleable.RoundProgressBar_round_first_text);

mFirstTextSize = dp2px(array.getDimension(R.styleable.RoundProgressBar_round_first_text_size, 20f));

mFirstTextColor = array.getColor(R.styleable.RoundProgressBar_round_first_text_color, Color.RED);

mSecondText = array.getString(R.styleable.RoundProgressBar_round_second_text);

mSecondTextSize = dp2px(array.getDimension(R.styleable.RoundProgressBar_round_second_text_size, 20f));

mSecondTextColor = array.getColor(R.styleable.RoundProgressBar_round_second_text_color, Color.RED);

mMinText = array.getString(R.styleable.RoundProgressBar_round_min_text);

mMinTextSize = dp2px(array.getDimension(R.styleable.RoundProgressBar_round_min_text_size, 20f));

mMinTextColor = array.getColor(R.styleable.RoundProgressBar_round_min_text_color, Color.RED);

mMaxText = array.getString(R.styleable.RoundProgressBar_round_max_text);

mMaxTextSize = dp2px(array.getDimension(R.styleable.RoundProgressBar_round_max_text_size, 20f));

mMaxTextColor = array.getColor(R.styleable.RoundProgressBar_round_max_text_color, Color.RED);

mAngleSize = array.getFloat(R.styleable.RoundProgressBar_round_angle_size, 270f);

mStartAngle = array.getFloat(R.styleable.RoundProgressBar_round_start_angle, 135f);

array.recycle();

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

int centerX = getWidth() / 2;

RectF rectF = new RectF();

rectF.left = mStrokeWidth;

rectF.top = mStrokeWidth;

rectF.right = centerX * 2 - mStrokeWidth;

rectF.bottom = centerX * 2 - mStrokeWidth;

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

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

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

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

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

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

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

Ttuz-1712383126496)]
[外链图片转存中…(img-F7Squ3Xg-1712383126497)]
[外链图片转存中…(img-VOELRpaS-1712383126497)]
[外链图片转存中…(img-UmIuWQb0-1712383126497)]
[外链图片转存中…(img-2a4XzEMn-1712383126498)]
img

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

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

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

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

[外链图片转存中…(img-xyouwbVz-1712383126499)]

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值