首先我们通过一些抓包技术和对网页的html进行分析,我们不难发现获取指定页的帖子无非就是在论坛网址上加上参数page=1而且请求方法为"GET"
访问网页返回的结果中可得知该页主题都在
flarum-content ul li a
分析完毕,开始编写代码,首先我们要在Kotlin中实现对该链接的请求,以第一页为例,我们使用HttpURLConnection进行GET请求并用Jsoup解析html内容
implementation("org.jsoup:jsoup:1.13.1")
Thread{//网络请求不可在主线程中完成否则会输出异常android.os.NetworkOnMainThreadException
try{
val connection = URL("https://bbs.znzx.cc/all?page=1").openConnection() as HttpURLConnection//初始化为URL并变成HttpURLConnection
connection.requestMethod = "GET"//设置请求方法为GET
connection.connectTimeout = 8000
connection.readTimeout = 8000
//设置超时
val reader = BufferedReader(InputStreamReader(connection.inputStream))
val htmlContent = reader.use(BufferedReader::readText).trimIndent()//获取到的html的内容
val document: Document = Jsoup.parse(htmlContent)
//用Jsoup进行解析
val topicElements: Elements = document.select("#flarum-content ul li a")
//解析该页的主题
}catch (ex: Exception) {
ex.printStackTrace()
}
}.start()//启动线程
以上代码执行出来的效果如下topicElements为:
然后我们要解析出链接和标题内容,这里新建一个类专门来储存
data class Theme(
var link: String,
var title: String,
)
var themeList: List<Theme> = listOf()//在全局定义一个列表
topicElements.forEach { element -> themeList+Theme(element.attr("href"),element.text())}
并将新的Theme添加到全局的List中,然后将这个themeList输出到UI布局中
LazyColumn {
themeList.forEach { theme->
item {
Text(text = theme.title)
Text(text = theme.link)
}
}
}
最终效果如下: