iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0

開頭

MVVM 的流程就是 Fragment 點擊事件 → ViewModel 執行事件 → Fragment 監聽狀態改變畫面

Post 流程

Fragment 點擊事件

一樣在 Fragment 的onViewCreated建立點擊事件

binding.upload.setOnClickListener {
    viewModel.uploadHackmd()
}

ViewModel 執行事件

因為 Post 是走副執行緒,所以直接用共常式執行,利用改變 _httpStatus 來決定畫面要顯示什麼

private var _httpStatus = MutableLiveData<String?>()
val httpStatus: LiveData<String?>
    get() = _httpStatus

fun uploadHackmd() {
    viewModelScope.launch {
        HttpManager.INSTANCE.post(body,
            token,
            postUrl,
            getApplication(),
            object : HttpResponseListener {
                override fun onFailure(status: String, responseBody: String) {
                    _httpStatus.postValue(status)
                }
                override fun onSuccess(responseBody: String) {
                    _httpStatus.postValue(BaseConstants.SUCCESS)                
                }
            })    
    }
}

Fragment 監聽狀態改變畫面

viewModel.httpStatus.observe(viewLifecycleOwner) { status ->
    status?.let {
        //這邊顯示上傳成功的畫面
    }
}

上一篇
111/26 - 上傳筆記(2/4) - Kotlinx.serialization
下一篇
111/28 - 上傳筆記(4/4) - 符合 HackMD 格式
系列文
聽說 HackMD 開放 API 串接,那麼用 Kotlin 寫個筆記 App 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言