Android实战开发-Kotlin教程(入门篇-登录功能实现 3.3)

上一篇我们利用前面学习的组件、布局知识成功的搭建一个登录界面,并且简单的实现了登录功能前的逻辑判断,今天我们来学习一下怎么具体的实现登录功能,具体来说,我们应该怎么样和服务端实现数据的请求和回调。

网络请求环境配置

Android的网络请求我们常用Retrofit+Okhttp的方式来请求接口。
首先,我们来配置一下依赖库,在我们Moudle项目的build.gradle文件新增依赖库。

 implementation 'com.squareup.retrofit2:retrofit:2.0.2'
 implementation 'com.squareup.okhttp3:okhttp:3.1.2'
 implementation 'com.squareup.retrofit2:converter-gson:2.0.2'

第一个是retrofit的依赖包,第二个是okhttp框架包,通常会和第一个配合一起用,第三个是gson包,用来将json数据转换对应的实体对象或者列表。

其次,新建一个API配置接口文件命名ApiProtocol,用来查看和管理所有接口,内容格式如下:

  interface ApiProtocol {
     @POST("/smartbackstage/appUser/loginTest")
     @FormUrlEncoded
      fun submitLogin(@Field("userId") userId: String?,@Field("password") password: String?): Call<ResponseBody>
}

这里我们新增了一个submitLogin的接口,指定它的请求方式为Post请求,并且对应的服务端API为/smartbackstage/appUser/loginTest,同时指定两个请求参数分别为userId和password。

最后,我们需要在AndroidManifest.xml文件中新增网络请求权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.ktolin.application">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.KtolinApplication">
        <activity
            android:name=".LoginActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:exported="true"></activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

登录请求

网络请求环境搭建完成后,我们来尝试一下完成登录模块的数据请求功能,在上一篇中我们完成了登录界面用户名和密码的简单的非空校验,完成校验后就可以将对应的值传入接口,下面我们创建一个登录请求方法。

 private fun requestLogin(userId:String,password:String) {
        val retrofit = Retrofit.Builder()
            .baseUrl("http://192.168.1.196:8443/") // 设置 网络请求 Url
            .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
            .build()
        val request = retrofit.create(ApiProtocol::class.java)
        val call= request.submitLogin(userId,password)
        call.enqueue(object :Callback<ResponseBody> {
            override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                println("请求成功")
                val result = response.body().string()
                System.out.println(result)
                val entity:ResponseEntity= Gson().fromJson(result, ResponseEntity::class.java)
                Toast.makeText(this@LoginActivity, "登录成功!", Toast.LENGTH_SHORT).show()
            }

            override fun onFailure(call: Call<ResponseBody>, throwable: Throwable) {
                println("请求失败")
                println(throwable.message)
            }
        })
    }

这里baseUrl中需要填入对应的服务器主机地址,request.submitLogin(userId,password)指定接口请求成功后在onResponse方法中返回结果,请求失败后在onFailure中返回结果,请求成功后,我们需要将得到的结果转换为对应的实体对象。

请求结果:

 {"msg":"操作成功","code":200}

我们先创建一个实体对象结构,如下:

class ResponseEntity {
    /*返回结果提示*/
    var msg :String?=null
    /*返回码*/
    var code:Int=0
    /*返回内容*/
    var data=null
}

通过Gosn库我们可以将返回的Json格式结果转换为对应的实体类对象

val entity:ResponseEntity= Gson().fromJson(result, ResponseEntity::class.java)

至此,我们基本上实现了一个完整的登录模块。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值