Retrofit简单使用(Kotlin)

Retrofit是Square公司开源的一个基于OkHttp实现的Android网络请求框架,它将我们自己开发的底层的代码和细节都封装了起来。
https://github.com/square/retrofit
http://square.github.io/retrofit/

配置Retrofit

在/app/build.gradle配置中加入

compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'

最后一行是为了增加支持返回值为JSON类型数据所添加的依赖包,如有需要可自行添加其他包

Gson: com.squareup.retrofit2:converter-gson
Jackson: com.squareup.retrofit2:converter-jackson
Moshi: com.squareup.retrofit2:converter-moshi
Protobuf: com.squareup.retrofit2:converter-protobuf
Wire: com.squareup.retrofit2:converter-wire
Simple XML: com.squareup.retrofit2:converter-simplexml
Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

网络访问接口

interface IpService {

    //GET
    @GET("getIpInfo.php?ip=59.108.54.37")
    fun getIpMsg():Call

    //动态配置URL地址
    @GET("{path}/getIpInfo.php?ip=59.108.54.37")
    fun getIpMsgPath(@Path("path") path: String):Call

    //动态指定查询条件
    @GET("getIpInfo.php")
    fun getIpMsgQuery(@Query("ip") ip:String):Call

    //动态指定查询条件组
    @GET("getIpInfo.php")
    fun getIpMsgQueryMap(@QueryMap option:Map):Call

    //Post 表单形式请求
    @FormUrlEncoded
    @POST("getIpInfo.php")
    fun getIpMsgPost(@Field("ip") first:String):Call

    //POST JSON数据请求
    @POST("getIpInfo.php")
    fun getIpMsgPostBody(@Body ip: Ip):Call

    //单文件上传
    @Multipart
    @POST("user/photo")
    fun upDateUser(@Part photo: MultipartBody.Part, @Part("description") description: RequestBody):Call
    //多文件上传
    @Multipart
    @POST("user/photo")
    fun upDateUser(@PartMap photos:Map, @Part("description") description: RequestBody):Call

    //静态添加消息报头
    @GET("some/endpoint")
    @Headers("Accept-Encoding:application/json")
    fun getCarType():Call

    //动态添加消息报头
    @GET("some/endpoint")
    fun getCarType(@Header("Location") location:String):Call
}

创建Retrofit实例

 val retrofit: Retrofit =  Retrofit.Builder()
                .baseUrl("http://ip.taobao.com/service/")
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        val ipService = retrofit.create(IpService::class.java)

发起请求

        ipService.getIpMsg().enqueue(object:Callback{
            override fun onResponse(call: Call?, response: Response?) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

            override fun onFailure(call: Call?, t: Throwable?) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

        })


        ipService.getIpMsgQuery("202.204.105.195").enqueue(object :Callback{
            override fun onFailure(call: Call?, t: Throwable?) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

            override fun onResponse(call: Call?, response: Response?) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }
        })

以下是一个具体实例

请求接口

interface ApiService {
    @GET("china")
    fun getProvince(): Call>;

    @GET("china/{params}")
    fun getCity(@Path("params") id: String): Call>;
}

创建Retrofit实例

val retrofit: Retrofit =  Retrofit.Builder()
        .baseUrl("http://guolin.tech/api/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
val api = retrofit.create(ApiService::class.java)

发起请求

fun province() = api.getProvince()

fun getProvince(){

    province().enqueue(object : Callback> {
        override fun onResponse(call: Call>?, response: Response>?) {

            for(i in 0.. response!!.body()!!.size-1){
                System.out.println(response!!.body()!!.get(i).name)
            }

        }

        override fun onFailure(call: Call>?, t: Throwable?) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }

    })
}

Retrofit简单使用(Kotlin)_第1张图片

你可能感兴趣的:(android,retrofit2,网络请求,kotlin,android)