2024年Android最全Android 天气APP(三)访问天气API与数据请求,2024年最新android面试题app

最后

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

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

return status;

}

public void setStatus(String status) {

this.status = status;

}

public NowBean getNow() {

return now;

}

public void setNow(NowBean now) {

this.now = now;

}

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-01 15:45

  • utc : 2020-04-01 07:45

*/

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

/**

  • cloud : 100

  • cond_code : 104

  • cond_txt : 阴

  • fl : 18

  • hum : 82

  • pcpn : 0.0

  • pres : 1006

  • tmp : 18

  • vis : 16

  • wind_deg : 79

  • wind_dir : 东北风

  • wind_sc : 2

  • wind_spd : 9

*/

private String cloud;

private String cond_code;

private String cond_txt;

private String fl;

private String hum;

private String pcpn;

private String pres;

private String tmp;

private String vis;

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

return fl;

}

public void setFl(String fl) {

this.fl = fl;

}

public String getHum() {

return hum;

}

public void setHum(String hum) {

this.hum = hum;

}

public String getPcpn() {

return pcpn;

}

public void setPcpn(String pcpn) {

this.pcpn = pcpn;

}

public String getPres() {

return pres;

}

public void setPres(String pres) {

this.pres = pres;

}

public String getTmp() {

return tmp;

}

public void setTmp(String tmp) {

this.tmp = tmp;

}

public String getVis() {

return vis;

}

public void setVis(String vis) {

this.vis = vis;

}

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;

}

}

}

}

这样就不用在一个个的去写Get和Set方法了,都给你生成好了。一步到位,用了之后根本停不下来。

3. 网络请求


通过上面的访问地址,我们可以看得出来,只要修改location的值就可以得到不同地方的天气数据信息了,刚才是在网页上访问的,接下来就通过Android来访问这个地址,得到数据并且显示出来。

说到网络请求,就不得不提一下OKHttp网络请求框架,刚开始你可能比较陌生,这里做一下简单的讲解。

① OKHttp

OkHttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架。

网络请求分两种方式Post请求和Get请求

1.Post和Get的区别
  • 浏览器对URL的长度有限制,所以GET请求不能代替POST请求发送大量数据

  • GET请求发送数据更小

  • POST请求不能被缓存

  • POST请求相对GET请求是「安全」的

  • POST请求Request Body传递参数

以上皆是个人理解,如有不对,望斧正。

2.同步和异步的区别
  • 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

  • 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

以上皆是个人理解,如有不对,望斧正。

3.Get的同步请求

对于同步请求在请求时需要开启子线程,请求成功后需要跳转到UI线程修改UI,示例代码如下:

public void getDataSync() {

//创建新的线程

new Thread(new Runnable() {

@Override

public void run() {

try {

OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象

Request request = new Request.Builder()

.url(“http://www.baidu.com”)//请求接口。如果需要传参拼接到接口后面。

.build();//创建Request 对象

Response response = null;

response = client.newCall(request).execute();//得到Response 对象

if (response.isSuccessful()) {

Log.d(“kwwl”, “response.code()==” + response.code());

Log.d(“kwwl”, “response.message()==” + response.message());

Log.d(“kwwl”, “res==” + response.body().string());

//此时的代码执行在子线程,修改UI的操作请使用handler跳转到UI线程。

}

} catch (Exception e) {

e.printStackTrace();

}

}

}).start();

}

注意事项:

1,Response.code是http响应行中的code,如果访问成功则返回200.这个不是服务器设置的,而是http协议中自带的。res中的code才是服务器设置的。注意二者的区别。

2,response.body().string()本质是输入流的读操作,所以它还是网络请求的一部分,所以这行代码必须放在子线程。

3,response.body().string()只能调用一次,在第一次时有返回值,第二次再调用时将会返回null。原因是:response.body().string()的本质是输入流的读操作,必须有服务器的输出流的写操作时客户端的读操作才能得到数据。而服务器的写操作只执行一次,所以客户端的读操作也只能执行一次,第二次将返回null。

4.Get的异步请求

这种方式不用再次开启子线程,但回调方法是执行在子线程中,所以在更新UI时还要跳转到UI线程中。

private void getDataAsync() {

//创建OkHttpClient对象

OkHttpClient client = new OkHttpClient();

//创建Request 对象

Request request = new Request.Builder()

.url(“http://www.baidu.com”)

.build();

client.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

最后

我一直以来都有整理练习大厂面试题的习惯,有随时跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。

不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?

我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。

我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是部分内容截图:

部分目录截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

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

Callback() {

@Override

public void onFailure(Call call, IOException e) {

最后

我一直以来都有整理练习大厂面试题的习惯,有随时跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。

不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?

我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。

我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是部分内容截图:

[外链图片转存中…(img-hxN0pJx6-1714824005811)]

[外链图片转存中…(img-aWfXtiNU-1714824005812)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

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

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值