5.租赁系统,使用安卓搭建登录页面,首页静态页面

71 阅读1分钟

第一次接触安卓,安卓的东西与前端跟鸿蒙有点不太一样

环境搭建

使用Android Studio初始化项目

使用可视化工具完成静态布局

image.png

image.png

为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用来解析网络请求的数据响应 定义响应数据

image.png 开始发送请求

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())
        }



    }
}

感兴趣的小伙伴可以查看我的gitee地址

gitee.com/liuhaobi/ho…