Koltin27(1),12道Android高级面试题

// 所有的数据

val allList: ArrayList = ArrayList()

fun onHomeSuccess(nearbySellers: List, otherSellers: List) {

allList.clear()

allList.addAll(nearbySellers)

allList.addAll(otherSellers)

homeRvAdapter.setData(allList)

//有数据可以滚动才可以监听滚动事件,设置标题的透明效果

rvHome.setOnScrollListener(object : RecyclerView.OnScrollListener() {

override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {

if (recyclerView != null) {

super.onScrollStateChanged(recyclerView, newState)

}

}

override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {

if (recyclerView != null) {

super.onScrolled(recyclerView, dx, dy)

}

sum += dy

if (sum > distance) {

alpha = 255

} else {

alpha = sum * 200 / distance

alpha += 55

}

Log.e(“home”, “alpha:$alpha”)

ll_title_container.setBackgroundColor(Color.argb(alpha, 0x31, 0x90, 0xe8))

}

})

}

fun onHomeFailed() {

toast(“onHomeFailed”)

}

}

LoginActivity.kt登录界面通过短信验证

package com.example.takeout.ui.activity

import android.annotation.SuppressLint

import android.os.Bundle

import android.os.Handler

import android.os.Message

import android.os.SystemClock

import android.text.TextUtils

import android.util.Log

import androidx.appcompat.app.AppCompatActivity

import cn.smssdk.EventHandler

import cn.smssdk.SMSSDK

import com.example.takeout.R

import com.example.takeout.presenter.LoginActivityPresenter

import com.heima.takeout.utils.SMSUtil

import com.mob.MobSDK

import kotlinx.android.synthetic.main.activity_login.*

import org.jetbrains.anko.toast

class LoginActivity : AppCompatActivity() {

//监听每一次提交验证码操作

val eh = object : EventHandler() {

override fun afterEvent(event: Int, result: Int, data: Any) {

if (result == SMSSDK.RESULT_COMPLETE) {

//回调完成

if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {

//提交验证码成功

Log.d(“LoginActivity”, “提交验证码成功”)

//登录外卖服务器

val phone = et_user_phone.text.toString().trim()

loginActivityPresenter.loginByPhone(phone)

} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {

//获取验证码成功

Log.d(“LoginActivity”, “获取验证码成功”)

} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {

//返回支持发送验证码的国家列表

}

} else {

(data as Throwable).printStackTrace()

}

}

}

lateinit var loginActivityPresenter: LoginActivityPresenter

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_login)

loginActivityPresenter = LoginActivityPresenter(this)

initListener()

MobSDK.submitPolicyGrantResult(true, null);

//注册短信回调

SMSSDK.registerEventHandler(eh)

}

private fun initListener() {

iv_user_back.setOnClickListener { finish() }

//获取验证码

tv_user_code.setOnClickListener {

val phone = et_user_phone.text.toString().trim()

//验证手机号码

if (SMSUtil.judgePhoneNums(this, phone)) {

// 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”

SMSSDK.getVerificationCode(“86”, phone)

//开启倒计时

tv_user_code.isEnabled = false

Thread(CutDownTask()).start()

}

}

iv_login.setOnClickListener {

//提交验证码

val phone = et_user_phone.text.toString().trim()

val code = et_user_code.text.toString().trim()

if (SMSUtil.judgePhoneNums(this, phone) && !TextUtils.isEmpty(code)) {

// 提交验证码,其中的code表示验证码,如“1357”

SMSSDK.submitVerificationCode(“86”, phone, code)

}

//登录外卖服务器

// loginActivityPresenter.loginByPhone(phone)

}

}

companion object {

val TIME_MINUS = -1 //剩余时间的消息

val TIME_IS_OUT = 0 //60s超时

}

//创建一个handler来刷新UI

val handler = @SuppressLint(“HandlerLeak”)

object : Handler(){

override fun handleMessage(msg: Message?) {

super.handleMessage(msg)

when(msg!!.what){

TIME_MINUS -> tv_user_code.text = “剩余时间(${time})秒”

TIME_IS_OUT -> {

tv_user_code.isEnabled = true

tv_user_code.text = “点击重发”

time = 60

}

}

}

}

//倒计时的实现60s

var time = 60

inner class CutDownTask: Runnable {

override fun run() {

//倒计时循环

while (time>0){

//刷新剩余时间,当前子线程,使用handler

handler.sendEmptyMessage(TIME_MINUS)

SystemClock.sleep(999)

time –

}

handler.sendEmptyMessage(TIME_IS_OUT)

}

}

// 使用完EventHandler需注销,否则可能出现内存泄漏

override fun onDestroy() {

super.onDestroy()

SMSSDK.unregisterEventHandler(eh)

}

fun onLoginSuccess() {

finish()

toast(“登录成功”)

}

fun onLoginFailed(){

toast(“登录失败”)

}

}

ResponseInfo1.kt网络Retrofit实现

package com.example.takeout.model.net

class ResponseInfo1 {

//服务器开发者定义的数据结构

var code: String = “”

var data: String = “”

}

LoginActivityPresenter.kt网络请求

package com.example.takeout.presenter

import com.example.takeout.beans.User

import com.example.takeout.ui.activity.LoginActivity

import com.google.gson.Gson

//继承NetPresenter

class LoginActivityPresenter(val loginActivity: LoginActivity) : NetPresenter(){

//使用手机号码登录的业务

fun loginByPhone(phone:String) {

val homeCall = takeoutService.loginByPhone()

homeCall.enqueue(callback)

}

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

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。如有需要获取完整的资料文档的朋友点击我的GitHub免费获取。

2021最新上万页的大厂面试真题

[外链图片转存中…(img-Lfck2eQe-1710843393708)]

七大模块学习资料:如NDK模块开发、Android框架体系架构…

[外链图片转存中…(img-lhP6B8ly-1710843393708)]

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。如有需要获取完整的资料文档的朋友点击我的GitHub免费获取。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值