Возврат данных в UploadTask onSuccessListener - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь загрузить несколько файлов в Firebase и хотел бы связать его с другим ребенком, когда все задачи загрузки будут выполнены.Чтобы добиться этого, я пытался использовать сопрограммы в kotlin.Ниже приведен код (пожалуйста, исправьте меня, если я ошибаюсь, потому что я действительно плох в сопрограммах):

fun create(placemark: PlacemarkModel,callback: () -> Unit=fun(){})=runBlocking {
    val key = db.child("users").child(userId).child("placemarks").push().key
    placemark.id = key!!
    placemarks.add(placemark)
db.child("users").child(userId).child("placemarks").child(key).setValue(placemark)            
    uploadImage(placemark.dp,"dp",placemark)
    if (placemark.images.size>0){
      placemark.images.forEach{
      uploadImage(it,"images",placemark,placemark.images.indexOf(it))
    }
}

А вот моя функция uploadImage, которую я намеревался ждать, пока она не закончит свою работу и пройдетвернуться URI к основной функции

suspend fun uploadImage(image:String,
             type:String,
             placemark: PlacemarkModel,
             index:Int=0,
             callback:()->Unit=fun(){}):URI{
    st = FirebaseStorage.getInstance().reference
    info("Coroutines 2")
    val imageRef = st?.child(userId + '/' + File(image).name)
    val data=readAndCompress(image)
    data?.let {
    var uploadTask=imageRef?.putBytes(data)
    uploadTask?.addOnFailureListener {
      println(it.message)
    }?.addOnSuccessListener { taskSnapshot ->
      //I want to return the URI here however return is not allowed
    }
  }
}

Спасибо за ваше время.

1 Ответ

0 голосов
/ 21 декабря 2018

Оказывается, я могу добавить все задачи в список задач и вызвать

Tasks.whenAllSuccess (tasks) .addCompleteListener {// обратный вызов здесь}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...