发表一下感概
这两天一直在撸代码,进度非常慢,其实逻辑倒不是很复杂,一个是时间和精力有限,每天也仅仅有两三小时的时间。还有一个是技术不熟悉,也是边学边做,所以耗费了不少时间。不过想来也是值得的,毕竟学到了不少新技术。虽然用以前的方法也能实现,但是那样就没有意义了,不是吗?
一个协程的用法——回到主线程
昨天在写用户基本信息提交,突发奇想,决定使用协程来提交数据。我需要启动协程提交完数据之后,回到主线程,因为我要做一些UI操作。协程的介绍文章很多,但是几乎千篇一律,仅仅是针对Kotlin的协程语法做介绍,对于这种Android特殊的回到UI线程却谈的太少。后来我还是在买的书中发现了解决方法,废话不说直接上代码。
private fun updateUserBasic() = runBlocking {
val loadingProgressBar = ProgressDialog.show(this@UserBasicActivity, null, getString(R.string.loading))
var resultCode = -10
val updateJob = launch(CommonPool) {
resultCode = UserManager.updateUserBasic(userId!!, sex, ageRange, liveProvince)
}
updateJob.join()
loadingProgressBar.dismiss()
}
协程优点就是虽然是异步操作,但是却是同步的写法,不会陷入各种回调的陷阱里。其中updateJob.join()
是关键,我是在主线程启动协程的,该方法会等待协程结束后再在主线程执行后续的代码逻辑。所以下面的loadingProgressBar.dismiss()
是在主线程执行的。
省市区JSON集合
虽然我当初的设计逻辑是只要提交所在省,但是我还是今天花时间把全国省市区的数据整理好。我觉得光是省,可能有点单薄,加上市会比较好一点,这个会在后面修改。网上的JSON格式数据有些要么比较旧了,要么就是格式不能满足我的需求,没办法解析。为此,我整理了一份,下载地址。这个格式已经比较规范了,可以用GSON直接解析生成对象,我明天会写文章说明如何解析。
先前上传过一次,但是有错误,居然不能撤销,狂晕中。这次测试过之后重新上传。下载需要1资源分,因为我也不知道怎么设置0资源分下载。没有下载积分的同学也不要担心,等我把这边的登录功能全部整理好后,会把服务端的代码也提交到Github上,到时候你就可以使用了。
接下来要做的事情
好友功能可能要先放一放了,这周主要把先前的功能完善,界面也要稍微搭点设计,不然太简陋了,但是本人确实毫无审美能力,这个倒是一个头疼的事情。另外获取省市区除了用户手动选择之外,我会使用百度定位,这周也会将其接入,到时候也会写一篇文章说明。