十五、retrofit记录


1. 服务器返回json字串如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"code": 0,
"msg": "success",
"data": {
"pageCount": 1,
"total": 3,
"list": [
{
"createTime": "2019-03-04 15:35:30",
"roomAddress": "市公安局主楼212101",
"timePeriod": "2019-03-04 20:00-20:30",
"meetStatus": "会议已结束"
},
{
"createTime": "2019-03-04 09:43:55",
"roomAddress": "钦州公安局1栋1层101",
"timePeriod": "2019-03-04 10:30-11:30",
"meetStatus": "会议已结束",
}
]
}
}

android端使用Retrofit封装Bean来接收服务端返回json有两种方法。这里记录如下
两种方法都要使用的共用类 Result.kt代码如下:

1
2
3
4
5
6
7
8
9
open class Result<T>(
val data: T? = null,
val success: Boolean = false
) : BaseResult()

open class BaseResult {
val code: Int = 0
val msg: String? = null
}

方法一(推荐):

1
2
3
4
5
6
7
8
9
10
11
data class MeetingResp(
val pageCount: Int,
val total: Int,
val list: MutableList<EventWarningBean>?
)
data class EventWarningBean(
val createTime: String?,
val roomAddress: String?,
val timePeriod: String?,
val meetStatus: String?
)

使用方法一接收服务端返回json时只要: Result 即可

方法二(不推荐):
新建类 ListResult.kt

1
2
3
4
5
open class ListResult<T> (
val list: List<T>?,
val pageCount:Int?,
val total: Int?
)

使用方法二接收服务端返回json时只要: Result<ListResult> 即可
这两种方式我之所以推荐使用方法一,而不推荐方法二原因是:
要建与Result同等级的ListResult类,如果日后要接入其他平台写的后台,里面参数不叫 list, 而是 rows 或者其他的,我是不是还得要建立很多个跟 ListResult类似的 顶级类呢?顶级类越少越好,
而方法一就很灵活了。

2. 有如下GET方式请求网址: http://116.62.167.158/api/gateway/police-content/meetingRoom/getNumList?floorName=123123&buildingName=123123

可以看到参数及对应的值都附加到请求url里了。这种请求方式使用 retrofit的 @Query 即可
@GET(“gateway/police-content/meetingRoom/getNumList”)
fun getRoomList(@Query(“floorName”) floorName: String, @Query(“buildingName”) buildingName: String): Observable<Result<ArrayList>>
GET请求 retrofit还提供了 @Path 方式,这种方式对应url是什么样子的,我当前不得而知,做个记录先。