2024Android开发社招面试总结+解答分享,Android 垃圾分类APP,推荐

之后再新建一个TrashApplication类,代码如下:

package com.llw.goodtrash;

import com.llw.mvplibrary.BaseApplication;

import com.llw.mvplibrary.network.NetworkApi;

/**

  • 自定义Application

*/

public class TrashApplication extends BaseApplication {

@Override

public void onCreate() {

super.onCreate();

//初始化网络框架

NetworkApi.init(new NetworkRequiredInfo(this));

}

}

自定义的Application需要到AndroidManifest.xml中去配置才会生效,如下图所示:

在这里插入图片描述

现在你就可以访问网络了,这虽然看起来是单独使用Okhttp要麻烦,但实际上是要方便很多的,你可能现在不明白,以后你会懂得。

我在天行API中请求接口使用的KEY,这里我新建了一个全局常量类,放在里面,在com.llw.goodtrash包下新建一个utils包。包下的代码如下:

package com.llw.goodtrash.utils;

/**

  • 全局常量

  • @author llw

  • @date 2021/3/30 15:14

*/

public class Constant {

/**

  • 垃圾分类的key 请替换为自己的

*/

public static final String KEY = “783da68c7ea7e10fcd259db651cc550b”;

/**

  • 请求成功码

*/

public static final int SUCCESS_CODE = 200;

}

之前通过返回的数据可以生成一个返回数据实体,在com.llw.goodtrash包下新建一个model包,包下新建一个TrashResponse类,代码如下:

package com.llw.goodtrash.model;

import java.util.List;

/**

  • 垃圾分类返回数据

*/

public class TrashResponse {

/**

  • code : 200

  • msg : success

  • newslist : [{“name”:“羽毛球”,“type”:3,“aipre”:0,“explain”:“干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。”,“contain”:“常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物”,“tip”:“尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内”},{“name”:“羽毛球拍”,“type”:0,“aipre”:0,“explain”:“可回收垃圾是指适宜回收、可循环利用的生活废弃物。”,“contain”:“常见包括各类废金属、玻璃瓶、易拉罐、饮料瓶、塑料玩具、书本、报纸、广告单、纸板箱、衣服、床上用品、电子产品等”,“tip”:“轻投轻放;清洁干燥,避免污染,费纸尽量平整;立体包装物请清空内容物,清洁后压扁投放;有尖锐边角的、应包裹后投放”}]

*/

private int code;

private String msg;

private List newslist;

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public List getNewslist() {

return newslist;

}

public void setNewslist(List newslist) {

this.newslist = newslist;

}

public static class NewslistBean {

/**

  • name : 羽毛球

  • type : 3

  • aipre : 0

  • explain : 干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。

  • contain : 常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物

  • tip : 尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内

*/

private String name;

private int type;

private int aipre;

private String explain;

private String contain;

private String tip;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getType() {

return type;

}

public void setType(int type) {

this.type = type;

}

public int getAipre() {

return aipre;

}

public void setAipre(int aipre) {

this.aipre = aipre;

}

public String getExplain() {

return explain;

}

public void setExplain(String explain) {

this.explain = explain;

}

public String getContain() {

return contain;

}

public void setContain(String contain) {

this.contain = contain;

}

public String getTip() {

return tip;

}

public void setTip(String tip) {

this.tip = tip;

}

}

}

下面设置api接口,在com.llw.goodtrash包下新建一个api包,包下新建一个ApiService接口。

package com.llw.goodtrash.api;

import com.llw.goodtrash.model.TrashResponse;

import io.reactivex.Observable;

import retrofit2.http.GET;

import retrofit2.http.Query;

import static com.llw.goodtrash.utils.Constant.KEY;

/**

  • API接口

  • @author llw

  • @date 2021/3/30 15:13

*/

public interface ApiService {

/**

  • 垃圾分类

  • @param word 物品名

  • @return TrashResponse 结果实体

*/

@GET(“/txapi/lajifenlei/index?key=” + KEY)

Observable searchGoods(@Query(“word”) String word);

}

这里通过Observable观察TrashResponse,当获取到返回数据时,会解析成TrashResponse,就不需要手动去转了,而searchGoods标识方法名,后面的@Query(“word”) String word表示请求API时会把word作为参数拼接到请求地址后面。

下面构建页面访问网络的订阅类

在com.llw.goodtrash包下新建一个contract包,这个包下新建一个MainContract类。

package com.llw.goodtrash.contract;

import android.annotation.SuppressLint;

import com.llw.goodtrash.api.ApiService;

import com.llw.goodtrash.model.TrashResponse;

import com.llw.mvplibrary.base.BasePresenter;

import com.llw.mvplibrary.base.BaseView;

import com.llw.mvplibrary.network.NetworkApi;

import com.llw.mvplibrary.network.observer.BaseObserver;

/**

  • 主页面访问网络

*/

public class MainContract {

public static class MainPresenter extends BasePresenter {

/**

  • 搜索物品

  • @param word 物品名

*/

@SuppressLint(“CheckResult”)

public void searchGoods(String word) {

ApiService service = NetworkApi.createService(ApiService.class);

service.searchGoods(word).compose(NetworkApi.applySchedulers(new BaseObserver() {

@Override

public void onSuccess(TrashResponse groupResponse) {

if (getView() != null) {

getView().getSearchResponse(groupResponse);

}

}

@Override

public void onFailure(Throwable e) {

if (getView() != null) {

getView().getSearchResponseFailed(e);

}

}

}));

}

}

public interface MainView extends BaseView {

/**

  • 搜索物品返回

  • @param response

*/

void getSearchResponse(TrashResponse response);

/**

  • 搜索物品异常返回

  • @param throwable

*/

void getSearchResponseFailed(Throwable throwable);

}

}

下面回到MainActivity,先删掉上一篇添加的代码,然后修改代码如下图所示:

在这里插入图片描述

之后你需要重写五个方法。

@Override

public void initData(Bundle savedInstanceState) {

}

@Override

public int getLayoutId() {

return 0;

}

@Override

protected MainContract.MainPresenter createPresenter() {

return null;

}

@Override

public void getSearchResponse(TrashResponse response) {

}

@Override

public void getSearchResponseFailed(Throwable throwable) {

}

下面会一一修改这五个方法。

四、列表适配器


在上一篇文章中说到返回的是一个可变数组数据,那么是采用列表来显示,有列表,自然要有列表适配器,而列表适配器里面使用了item的布局。在layout下创建item_search_rv.xml,里面的代码如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:id=“@+id/item_search_goods”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_marginTop=“@dimen/dp_1”

android:background=“@color/white”

android:foreground=“?attr/selectableItemBackground”

android:orientation=“vertical”

android:padding=“@dimen/dp_12”>

<TextView

android:id=“@+id/tv_name”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“物品名称”

android:textColor=“@color/black”

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

<TextView

android:id=“@+id/tv_type”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_alignParentEnd=“true”

android:text=“垃圾类型”

android:textColor=“@color/black”

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

<TextView

android:id=“@+id/tv_explain”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_below=“@+id/tv_name”

android:layout_marginTop=“@dimen/dp_8”

android:text=“解释”

android:textColor=“@color/hint_color”

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

然后写适配器,在com.llw.goodtrash包下新建一个adapter包,包下新建一个SearchGoodsAdapter类,代码如下:

package com.llw.goodtrash.adapter;

import android.widget.TextView;

import androidx.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;

import com.chad.library.adapter.base.BaseViewHolder;

import com.llw.goodtrash.R;

import com.llw.goodtrash.model.TrashResponse;

import java.util.List;

/**

  • 搜索物品结果列表适配器

*/

public class SearchGoodsAdapter extends BaseQuickAdapter<TrashResponse.NewslistBean, BaseViewHolder> {

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

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

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

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

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

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

如何做好面试突击,规划学习方向?

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多

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

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

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

,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

[外链图片转存中…(img-HlF5xe8g-1712222619003)]

我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值