LiveData:使用以前存储的值

时间:2019-08-16 07:26:02

标签: android-livedata

我的Android应用允许用户从网络中获取特定日期的照片列表。它使用Retrofit和Glide来做到这一点。 Glide缓存所有图像。所获取的列表可以是0到1000张相机(使用0到10张相机拍摄的照片)。

结果将存储在LiveData值中,如下所示:

val photosFromApi: LiveData<List<Photo>> = photoRepository.getPhotos()

UI控件(片段)在我的ViewModel中调用此函数:

fun refreshPhotos(date: String, camera: String) {
        viewModelScope.launch {
            photoRepository.getPhotos(date, camera) // Coroutine suspend function
        }

然后,用户可以通过菜单调用以下功能来过滤结果:

  fun setCameraFilter(cameraFilter: String?) {
        try {         
             refreshPhotos(photosFromApi.value?.get(0)?.date,  cameraFilter)
             } catch (e: Exception) {
            Log.e("Camera filter error", e.toString())
        }

只要返回的列表不为空,此方法就可以正常工作。如果用户选择返回空列表的camerafilter,则值photosFromNasaApi.value?.get(0)?. date变为空。这意味着我的过滤器功能在用户下次调用该功能时不再起作用。然后,我得到一个“索引超出范围例外”。这是有道理的,因为LiveData val'photosFromApi'现在为空。

我需要编写哪种逻辑来防止这种情况?我想使用LiveData中以前存储的值(我需要重新查询的日期)。我无法编写条件来检查列表是否为空,因为只有在用户选择了camerafilter后才能验证此列表。

我查看了“ Transformations.switchMap”,但是由于我不更改类型,因此不确定是否正是我所需要的。

0 个答案:

没有答案