使用 Jetpack Compose 中的数据存储首选项进行 Firebase 存储图像缓存

问题描述 投票:0回答:1
@HiltViewModel
class ProfileViewModel @Inject constructor(
    // code
) : ViewModel() {
    private val _profilePicUrl = MutableStateFlow("")
    val profilePicUrl: StateFlow<String?> = _profilePicUrl

    init {
        viewModelScope.launch {
            val image = getUserProfileImage()
            if (image != null) {
                _profilePicUrl.value = image.toString()
            }
        }
    }

    private suspend fun observeUserProfileImage(): String? {
        var userProfileImageUrl: String? = null
        dataStoreRepository.getImageURL().collect { imageUrl ->
            userProfileImageUrl = imageUrl
        }
        return userProfileImageUrl
    }

    private suspend fun getUserProfileImage(): String? {
        return try {
            val firebaseImageUrl = getUserData("profileImage")

            if (firebaseImageUrl.toString()
                    .contains("profilePicture_${auth.currentUser!!.uid}") && firebaseImageUrl != null
            ) {
                saveData(firebaseImageUrl.toString())
                firebaseImageUrl.toString()
            } else {
                observeUserProfileImage()
            }
        } catch (e: Exception) {
            null
        }
    }


    private suspend fun getUserData(fieldName: String): Any? {
        return try {
            userRepository.getCurrentUserData(fieldName)
        } catch (e: Exception) {
            Log.d("MelonFeedError", e.message.toString())
            null
        }
    }

    private fun saveData(imageURL: String) {
        viewModelScope.launch {
            dataStoreRepository.saveImageURL(imageURL)
        }
    }

    // other code
}

当我打开飞行模式并打开此屏幕时,我想查看数据存储首选项中的图像。 这就是我正在检查的条件

if (firebaseImageUrl.toString().contains("profilePicture_${auth.currentUser!!.uid}") && firebaseImageUrl != null)
.

这对我不起作用。 谁能帮我解决这个问题吗?

这就是我想要的: 打开屏幕 -> 获取图像 Firebase -> 已收到或未收到图像

情况 1) 如果收到图像 -> 将其发送到首选项 -> 从首选项显示

情况 2) 如果未收到图像 -> 显示 pref 中的图像

请帮助我。

android firebase kotlin android-jetpack-compose firebase-storage
1个回答
0
投票

您的代码 if (firebaseImageUrl.toString() .contains("profilePicture_${auth.currentUser!!.uid}") && firebaseImageUrl != null ){ 保存数据(firebaseImageUrl.toString()) firebaseImageUrl.toString() }
检查图像看起来是否良好 但是你可以分享observeUserProfileImage()的代码吗 这个函数可能是罪魁祸首

© www.soinside.com 2019 - 2024. All rights reserved.