Я работаю над проектом, и мне нужно загрузить изображения в хранилище Firebase и получить URL-адрес для загрузки, прежде чем я смогу загрузить соответствующий класс модели в Firestore.
Я пытаюсь использовать защелки обратного отсчета, чтобы заблокироватьОсновной поток, пока загрузка не будет завершена.Я знаю, что есть лучшие методы, и не стесняйтесь рекомендовать некоторые из них, но я решил, что смогу просто просмотреть краткий экран загрузки.Проблема в том, что обратный вызов для задачи getDownloadurl никогда не вызывается.Я искал и искал и не могу понять это.Прямо сейчас мой код прямо из документации.
fun uploadListing(listing: Listing, images: ArrayList<ByteArray>, onCompleteListener: () -> Unit = {}) {
val listingRef = FirebaseFirestore.getInstance().collection(LISTINGS_COLLECTION).document()
val storageRef = FirebaseStorage.getInstance().reference
listing.id = listingRef.id
val countDownLatch = CountDownLatch(images.size)
var i = 0
images.forEach {
val imageRef = storageRef.child("images/${listing.id}/$i")
val uploadTask = imageRef.putBytes(it)
uploadTask.continueWithTask(Continuation<UploadTask.TaskSnapshot, Task<Uri>> { task ->
if (!task.isSuccessful) {
task.exception?.let { exception ->
throw exception
}
}
return@Continuation imageRef.downloadUrl
}).addOnCompleteListener { task ->
if (task.isSuccessful) {
listing.images.add(task.result.toString())
countDownLatch.countDown()
} else {
// Handle failures
// ...
}
}
}
countDownLatch.await()
listingRef.set(listing).addOnSuccessListener {
onCompleteListener()
}
}
Мои зависимости gradle ...
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.google.firebase:firebase-firestore:17.1.5'
implementation 'com.google.firebase:firebase-storage:16.0.5'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.google.firebase:firebase-core:16.0.6'
implementation 'com.squareup.picasso:picasso:2.5.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
// implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.5.3'
implementation 'com.google.code.gson:gson:2.8.5'
}