一、前言:
我们需要把http请求中的参数解析成map键值对,然后对应键值对逻辑处理。
//1、例如这样的请求链接
var url = "www.youdaoyun.com://book_page?bookid=1293&pixel_id=123456789&adjust_no_sdkclick=1"
//2、解析成map集合
{adjust_no_sdkclick=1, pixel_id=123456789, bookid=1293}
二代码、
1、点击运行
binding.btnClick.setOnClickListener {
var url = "www.youdaoyun.com://book_page?bookid=1293&pixel_id=123456789&adjust_no_sdkclick=1"
//开始解析
parseUrl(url)
}
2、解析方法
/**
* 解析数据
* 1、使用//分割数据之后,得到:book_page?bookid=1293&pixel_id=123456789&adjust_no_sdkclick=1
*/
fun parseUrl(url:String){
if (url.contains("www.youdaoyun.com://")) {
if (url.contains("book_page")) {
//1、使用//分割数据
val url1: String = url.split("//").get(1)
// 2、返回的键值对
val maps: Map<String, String> = urlSplit(url1)
Log.d("lyy", maps.toString())
//3、根据自己的需要,取对应的键值对值
if (maps.containsKey("bookid")) {
val bookid = maps["bookid"]
//...做一些页面跳转
Log.d("lyy", "----bookid: ${bookid}")
}
}
}
}
/**
* 解析成Map键值对
* www.youdaoyun.com://book_page?bookid=1293&pixel_id=123456789&adjust_no_sdkclick=1
* 1、第一次分割之后数据:bookid=1293&pixel_id=123456789&adjust_no_sdkclick=1
* 2、第二次分割之后数据:bookid=1293&pixel_id=123456789&adjust_no_sdkclick=1
* 3、第三次分割之后数据:bookid=1293 pixel_id=123456789 adjust_no_sdkclick=1 数组了
*/
fun urlSplit(url: String): Map<String, String> {
//返回结果组装
val map: MutableMap<String, String> = HashMap()
//1、首先去除空格,按?号分割成数组
var newUrl = url.trim { it <= ' ' }
var firtList = newUrl.split("?")
var strUrlParam = ""
if (firtList.size > 1) {
strUrlParam = firtList[1]
}
//2、&分割成数组
var secondList = strUrlParam.split("&")
secondList.forEach {
//3、=分割成数组
var threeList = it.split("=")
//解析出键值
if (threeList.size > 1) {
//正确解析
map[threeList[0]] = threeList[1]
}
}
return map
}
网友评论