写在前面
国庆在学校没事干,正好某课程表的查成绩功能又双叕崩了,一怒之下把它卸载!(课程表功能推荐苏大学长写的 wakeup课程表,各大商店都有)
正好学了点 kotlin,开始了我的小白安卓开发之旅~
2021年更新:
适配了最新版URP系统,美化UI设计,修改项目地址为:
https://github.com/SukiEva/Myhhu
欢迎 Star 和 Fork!
特别警告:
连接教务系统需在内网下,即连接校园网才能成功,
直接使用流量连接会卡死,请在校园网或校园VPN连接下使用该APP!
成果图
![]() |
![]() |
![]() |
![]() |
(别问我为什么有的UI没对齐,都是为了适配我自己的手机o(╥﹏╥)o
开始干活
声明一下使用了哪些依赖,防止看代码看不懂,很多操作通过已有的库会简化很多。
implementation 'org.jsoup:jsoup:1.13.1'
implementation "com.squareup.okhttp3:okhttp:4.9.0"
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation "org.jetbrains.anko:anko:$anko_version"
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
1、模拟登陆
模拟登陆和爬取信息我之前用python的Requests库写过了,所以只是把相关换成了Java 的 okhttp 和 jsoup。
思路是通过okhttp请求验证码的链接,并记录cookie,通过 bitmap 将图片显示在android上。
这部分我是看的 Android客户端加载网站验证码(okHttp Jsoup)
网页请求分析我就不介绍了,直接贴代码:
// LoginActivity.kt
private fun loadingCaptchaPic() {
//client = OkHttpClient()
initJwxt()
client = OkHttpClient().newBuilder()
.cookieJar(object : CookieJar {
//cookie的缓存区
private val cookieStore: HashMap<String, List<Cookie>> = HashMap()
override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {
//添加cookie
cookieStore[url.host] = cookies
cookie = cookies[0].name + "=" + cookies[0].value
}
override fun loadForRequest(url: HttpUrl): List<Cookie> {
val cookies = cookieStore[url.host]
//当Request 连接到网络的时候,OkHttp会调用loadForRequest()
// if (cookies != null) {
// println("加载了cookie:" + cookies)
// }
return cookies ?: ArrayList()
}
}).build()
val ImgUrl = homeUrl + "validateCodeAction.do"
//加载验证码图片代码
Thread(
object : Runnable {
var captchaPic: Bitmap? = null
override fun run() {
try {
val request = Request.Builder()
.removeHeader("User-Agent")
.addHeader(
"User-Agent",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4209.2 Safari/537.36"
)
.url(ImgUrl)
.build()
val response = client!!.newCall(request).execute()
val `is`: InputStream = response.body