【Kotlin】Android-LiveData类三步处理异步数据—附demo源码

本文旨在以少量代码和简单逻辑,演示LiveData类最基本用法,文中demo源码链接附在文末

特别说明:
本文采用 分—总结构展示代码(除gradle文件),即 先展示局部代码,随后说明其用法和作用;小节结尾处 再给出该部分对应文件的完整代码布局XML源码在文末

一、简要分析

LiveData类是处理异步数据(如网络请求,数据库访问等)的一大利器,LiveData类包含 一个数据类一个观察者,比喻一下, 该数据类是一只信鸽,而观察者就是等鸽人,使用时,把信鸽放飞出去,等鸽人不知道它会多久回来,但是只要信鸽飞回来,等鸽人就会立即取出信鸽身上的信件,然后传给领导。

二、逻辑实现

主要的三步:

  1. 创建数据类
  2. 启动观察者
  3. 使用异步数据

1.添加依赖

在gradle(Moudle)文件中添加LiveData所需依赖。

【Kotlin】Android-LiveData类三步处理异步数据—附demo源码
dependencies {
    // 生命周期库
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
}

2.创建LiveData的数据类—信鸽

MainActivity中声明一个MutableLiveData类命名为 textLiveData,并指定接收String类型的数据。

// 声明LiveData数据类变量——信鸽
private val textLiveData = MutableLiveData(String())

3.启动LiveData的观察者—等鸽人

// 启动该LiveData的观察者——等鸽人
textLiveData.observe(this,  { it ->
    it?.let {
        // 先留空,后文会完善
    }
})
 textLiveData.observe(参数1, 参数2)

参数1是绑定生命周期的对象,也就是上文提到的等鸽人的领导,在Activity中使用LiveData时,参数1传this,与该Activity绑定即可。

参数2是处理异步数据的方式,此处为了安全使用匿名函数进行LiveData的非空判断,其中的it就是返回的异步数据,即信鸽带回来的信件,可以直接按上式套用,内部放使用数据的函数。

4.设置点击事件

// 分别绑定对应布局控件
val show = findViewById(R.id.show)
val buttonToWorld = findViewById(R.id.update_to_world)
val buttonToTomorrow = findViewById(R.id.update_to_tomorrow)

// 设置"明天按钮"的监听
buttonToTomorrow.setOnClickListener {
    // 启动一个子线程
    thread {
        // 传递字符串给该LiveData
        textLiveData.postValue("你好,明天")
    }
}

// 设置"世界按钮"的监听
buttonToWorld.setOnClickListener {
    // 启动一个子线程
    thread {
        // 传递字符串给该LiveData
        textLiveData.postValue("你好,世界")
    }
}
// 传入数据来更新LiveData的值。传参后,相当于我们给信鸽绑上信件了。
textLiveData.postValue(参数)
// 为产生异步数据,简单调用子线程的方式
thread {
    // 里面放代码块,就启动了一个子线程
}

5.使用异步数据

// 启动该LiveData的观察者——等鸽人
textLiveData.observe(this,  { it ->
    it?.let {
        // 将新的LiveData数据设置为show文本控件的文字,显示出来
        show.text = it
    }
})

本文简单的处理拿到的异步数据:拿到新的LiveData数据后,将其设置为show控件的文字,显示出来。

6.真机测试结果

【Kotlin】Android-LiveData类三步处理异步数据—附demo源码

MainActivity完整代码

class MainActivity : AppCompatActivity() {
    // 此处声明LiveData数据类变量——信鸽
    private val textLiveData = MutableLiveData(String())

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 分别绑定对应布局控件
        val show = findViewById(R.id.show)
        val buttonToWorld = findViewById(R.id.update_to_world)
        val buttonToTomorrow = findViewById(R.id.update_to_tomorrow)

        // 设置"明天按钮"的监听
        buttonToTomorrow.setOnClickListener {
            // 启动一个子线程
            thread {
                // 传递字符串给该LiveData
                textLiveData.postValue("你好,明天")
            }
        }

        // 设置"世界按钮"的监听
        buttonToWorld.setOnClickListener {
            // 启动一个子线程
            thread {
                // 传递字符串给该LiveData
                textLiveData.postValue("你好,世界")
            }
        }

        // 启动该LiveData的观察者——等鸽人
        textLiveData.observe(this,  { it ->
            it?.let {
               // 将新的LiveData数据设置为show文本控件的文字,显示出来
               show.text = it
            }
        })
    }
}

三、布局设置

在约束布局中,简单的设置1个显示文本框、1个”明天按钮”、1个”世界按钮”。

【Kotlin】Android-LiveData类三步处理异步数据—附demo源码
  • 文本框id设为: show
  • “明天按钮”id设为: update_to_tomorrow
  • “世界按钮”id设为: *update_to_world

布局XML文件的完整代码


四、补充说明

特别指出, 本文为便于演示,并未按照规范使用LiveData,如谷歌官方推荐创建LiveData的实例存储某种类型的数据时, 通常在ViewModel类中完成。LiveData的其他特性也未完全指出,如生命周期感知、使用单例模式在多个 Activity、Fragment 和 Service 之间共享数据等。

本文仅是演示LiveData能够在Activity中进行简单的运用。更全面且深入的知识敬请阅读官方文档

如有任何疑问,请在评论区留言,我会努力回复。

demo源码 github地址:

https://github.com/darlingxyz/demo_livedata

Original: https://blog.csdn.net/qq_50920297/article/details/123921101
Author: 大风起兮呼呼呼
Title: 【Kotlin】Android-LiveData类三步处理异步数据—附demo源码

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816762/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球