我在尝试迭代addOnSuccessListener方法中的uploadTasks时遇到以下错误。
java.lang.ClassCastException:上传任务$任务快照不能转换为上传任务
那么我怎样才能得到addOnSuccessListener中每个Img的下载字符串呢?
val baos = ByteArrayOutputStream()
val tasks = mutableListOf<UploadTask>()
listImg.forEach {
if(bitmap!!.byteCount != it.byteCount) {
val bitmap = it
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
val data = baos.toByteArray()
var uploadTask = spaceRef.putBytes(data)
tasks.add(uploadTask)
}
}
Tasks.whenAllSuccess<UploadTask>(tasks).addOnSuccessListener { uploadTasks ->
//uploadTasks has size of 2
val urls = mutableListOf<Uri>()
lifecycleScope.launch
{
//Error throws here
uploadTasks.forEach{
urls.add(it.await().storage.downloadUrl.await())
}
}
}
1条答案
按热度按时间plicqrtu1#
whenAllSuccess
的类型是<TResult>
,所以应该使用结果类型UploadTask
(UploadTask.TaskSnapshot
):然后可以将第一个
await()
放到最后一行:奖金:不要阻塞主线程
注意
Tasks.whenAllSuccess()
会阻塞主线程直到所有上传成功,这意味着上传文件时UI可能会冻结。为了避免这种情况,请考虑使用Coroutines上传文件: