第一次接触安卓,安卓的东西与前端跟鸿蒙有点不太一样
环境搭建
使用Android Studio初始化项目
使用可视化工具完成静态布局
为edittext与button绑定事件
var button=findViewById<Button>(R.id.textView);
button.setOnClickListener{
lifecycleScope.launch {
login()
}
}
获取手机号码与验证码的输入内容
@DelicateCoroutinesApi
suspend fun login(){
var code=findViewById<EditText>(R.id.code);
var phone=findViewById<EditText>(R.id.phone);
GlobalScope.launch {
get(phone.text.toString(),code.text.toString())
}
}
封装http请求使用OkHttp第三方库
加入依赖
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
implementation("com.google.code.gson:gson:2.9.0")
implementation("com.squareup.retrofit2:converter-scalars:2.9.0")
Okhttp为kotlin的网络请求库,kotlin好像没有自身内置的网络请求库,gson用来解析网络请求的数据响应 定义响应数据
开始发送请求
var url="http://192.168.110.1:8080/login?phone=${phone}&code=${code}"
var request=Request.Builder()
.url(url)
.method("GET",null)
.build()
val client=OkHttpClient()
val call=client.newCall(request)
val res=call.execute()
接受请求并解析数据
var data= ""
res.body()?.string()?.let {
Log.e("success", it)
data=it
}
Log.e("login","2")
var gson=Gson()
Log.e("login","3")
val resp=gson.fromJson(/* json = */ data,/* classOfT = */ LoginData::class.java)
请求成功则进行页面跳转
Log.e("login","success")
val intent=Intent()
intent.setClass(this,IndexActivity::class.java)
startActivity(intent)
完整代码如下
package com.example.myapplication
import android.content.Intent
import android.os.Bundle
import android.os.Looper
import android.util.Log
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import com.example.myapplication.common.data.LoginData
import com.google.gson.Gson
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import okhttp3.OkHttpClient
import okhttp3.Request
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
var resu:Boolean=false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.login)
Log.println(android.util.Log.INFO,"hello","hello")
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
var button=findViewById<Button>(R.id.textView);
button.setOnClickListener{
lifecycleScope.launch {
login()
}
}
}
@DelicateCoroutinesApi
suspend fun login(){
var code=findViewById<EditText>(R.id.code);
var phone=findViewById<EditText>(R.id.phone);
GlobalScope.launch {
get(phone.text.toString(),code.text.toString())
}
}
fun get(phone:String,code:String){
var url="http://192.168.110.1:8080/login?phone=${phone}&code=${code}"
var request=Request.Builder()
.url(url)
.method("GET",null)
.build()
val client=OkHttpClient()
try {
val call=client.newCall(request)
val res=call.execute()
Log.e("login","1")
if(res.isSuccessful){
var data= ""
res.body()?.string()?.let {
Log.e("success", it)
data=it
}
Log.e("login","2")
var gson=Gson()
Log.e("login","3")
val resp=gson.fromJson(/* json = */ data,/* classOfT = */ LoginData::class.java)
if(resp.success){
Log.e("login","success")
val intent=Intent()
intent.setClass(this,IndexActivity::class.java)
startActivity(intent)
}else{
Toast.makeText(this,"登录失败",Toast.LENGTH_LONG).show()
Log.e("login","failed")
}
resu=true
}else{
Log.e("err","请求失败")
}
}catch (e:Exception){
Log.e("err",e.toString())
}
}
}