使用Kotlin编写网络基本网络请求

源码下载链接已经在篇尾给出

一:首先将网络请求需要的依赖添加到build.gradle中:

    //Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
    //RxJava
    implementation "io.reactivex.rxjava2:rxjava:2.2.0"
    //RxAndroid
    implementation "io.reactivex.rxjava2:rxandroid:2.0.2"

二:我们以访问github的api为例,请求网络:

  • 创建数据类(这里借助JsonToKotlinClass.jar,在篇尾会给出该jar包的链接)
    kotlin会默认帮我们创建好get()方法,如果想同时创建 getter 和 setter 方法需要将关键字val 更改为 var。

data class UserInfoEntity(
    val login: String,
    val id: Int,
    val node_id: String,
    val avatar_url: String,
    val gravatar_id: String,
    val url: String,
    val html_url: String,
    val followers_url: String,
    val following_url: String,
    val gists_url: String,
    val starred_url: String,
    val subscriptions_url: String,
    val organizations_url: String,
    val repos_url: String,
    val events_url: String,
    val received_events_url: String,
    val type: String,
    val site_admin: Boolean,
    val name: Any,
    val company: Any,
    val blog: String,
    val location: Any,
    val email: Any,
    val hireable: Any,
    val bio: Any,
    val public_repos: Int,
    val public_gists: Int,
    val followers: Int,
    val following: Int,
    val created_at: String,
    val updated_at: String
)

data class FollowersEntity(
    val login: String,
    val id: Int,
    val node_id: String,
    val avatar_url: String,
    val gravatar_id: String,
    val url: String,
    val html_url: String,
    val followers_url: String,
    val following_url: String,
    val gists_url: String,
    val starred_url: String,
    val subscriptions_url: String,
    val organizations_url: String,
    val repos_url: String,
    val events_url: String,
    val received_events_url: String,
    val type: String,
    val site_admin: Boolean
)

三:创建Api


interface Api {
    @GET("users/{path}")
    fun getUserInfo(@Path("path") string: String): Call<UserInfoEntity>

    @GET("users/HexlDL/followers")
    fun getFollowers():Observable<List<FollowersEntity>>
}

四:接下来就是我们要访问网络请求的代码:

  • 创建Retrofit
	    val baseUrl: String = "https://api.github.com/"
        val retrofit = Retrofit.Builder()
                .baseUrl(baseUrl)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build()

        val api = retrofit.create(Api::class.java)

  • 使用Retrofit默认访问方式,不引入Rxjava
api.getUserInfo("HexlDL")
                .enqueue(object : Callback<UserInfoEntity> {
                    override fun onFailure(call: Call<UserInfoEntity>?, t: Throwable?) {
                        println(t?.localizedMessage)
                    }

                    override fun onResponse(call: Call<UserInfoEntity>?, response: Response<UserInfoEntity>?) {
                        val userInfoEntity = response?.body()//获取请求数据实体
                        println(userInfoEntity.toString())//打印请求结果
                    }
                })
  • 使用Rxjava访问
api.getFollowers()
                .subscribeOn(Schedulers.io())//切换io线程请求网络
                .unsubscribeOn(AndroidSchedulers.mainThread())//切换到ui主线程更新ui
                .subscribe({ result ->//请求结果
                    println(result.toString())
                }, { error ->//请求错误
                    println(error.message)
                }, {//请求完成
                    println("complete")
                })

源码下载地址
jsonToKotlin下载官网链接,类似Java中GsonFormart

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值