以下代码显示了我用于获取变量downloadUrl的firebase存储上载任务,因为downloadUrl在日志中打印,所以downloadUrl不为null,但是当我调用函数saveProfile时,它返回null,为什么?
var downloadUrl: String? = null
fun upload(bytes: ByteArray) {
val storageReference = FirebaseStorage.getInstance().reference
.child(
"images/users/${FirebaseAuth.getInstance().currentUser!!.uid}/profile_image"
)
val metadata = StorageMetadata.Builder()
.setContentType("image/jpg")
.setContentLanguage("en")
.build()
storageReference.putBytes(bytes, metadata).addOnSuccessListener {
model.listener!!.progressBarGone()
model.listener!!.toast("Uploaded Successfully")
val urlTask = it.storage.downloadUrl
while (!urlTask.isSuccessful);
this.downloadUrl = urlTask.result.toString()
Log.d("Upload", "DownloadUrl $downloadUrl")
这是saveProfile函数。
fun saveProfile() {
val user = User()
if (model.name.isNullOrEmpty() || model.phone.isNullOrEmpty()) {
model.listener!!.toast("Fields cannot be empty")
return
}
if (downloadUrl.isNullorEmpty()) {
log.d(TAG, "URL empty")
}
user.name = model.name
user.phone = model.phone
user.profile_image = downloadUrl
答案 0 :(得分:0)
致电时
this.downloadUrl = urlTask.result.toString()
您将downloadUrl
分配给与传递给addOnSuccessListener
的lambda绑定的对象,而不是全局downloadUrl
。为了快速解决,我建议您将全局downloadUrl
重命名为其他名称(不会被遮盖)。