【问题标题】:How to run function before running other?在运行其他功能之前如何运行功能?
【发布时间】:2021-06-26 17:08:36
【问题描述】:

嘿,我正在尝试将数据发布到我的 RESTAPI,所以我的想法是将图片上传到 Firebase 存储,然后获取上传的图片链接,然后执行发布到我的 RESTAPI 的函数

POST 方法

fun addItem(imageUri: Uri, title: String, description: String) {

        isItemAdditionFinished.value = false
        runBlocking {
            Log.d(PACKAGE_NAME_LOG,"Blocking cuntion")
            uploadPicture(imageUri)
        }
        viewModelScope.launch {
            if (repository.addItem(title, description, imageUrl.value).code() == 201) {
                Log.d(PACKAGE_NAME_LOG, isItemAdditionFinished.toString())
                isItemAdditionFinished.value = true

            }
        }
    }

上传图片到firebase的功能

fun uploadPicture(imageUri: Uri) {
        val imageName = storageReference.child("image" + imageUri.pathSegments)
        imageName.putFile(imageUri).addOnSuccessListener {
            imageName.downloadUrl.addOnSuccessListener {
                Log.d(PACKAGE_NAME_LOG, it.toString())
                imageUrl.value = it.toString()
            }

        }
    }

runblocking 不起作用,其余 api 仅保存标题和描述值 我希望它等到图片上传然后发布它

【问题讨论】:

    标签: android firebase retrofit kotlin-coroutines


    【解决方案1】:

    runBlocking 工作(例如阻止执行)。你需要在里面有一个挂起函数。

    目前你只是在调用一个不会挂起协程的普通函数。

    所以,你需要suspend fun uploadPicture,而不是fun uploadPicture

    这应该可行。

    除此之外,如果你下一个函数取决于第一个函数的结果。我建议您使用async/await 以获得更简洁的代码。

    https://levelup.gitconnected.com/kotlin-coroutines-async-await-part-3-6108bf6be5c4

    https://joebirch.co/android/using-firebase-on-android-with-kotlin-coroutines/

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多