2017-06-01 87 views
1

通过Firebase存储上传文件时,onSuccess方法未调用。Firebase存储的OnSuccessListener回调未调用

我目前使用'com.google.firebase:firebase-storage:10.2.6'运行Android Studio 3.0 Canary 2。

fun uploadImage(pathToImage: String, downloadCallback: FirebaseCallback<String?>) { 
     val file = Uri.fromFile(File(pathToImage)) 
     val ref = mStorRef.child("images/"+file.lastPathSegment) 

     ref.putFile(file).addOnSuccessListener { 
      object : OnSuccessListener<UploadTask.TaskSnapshot> { 
       override fun onSuccess(taskSnapshot: UploadTask.TaskSnapshot?) { 
        val url = taskSnapshot?.downloadUrl 
        Log.d("FirebaseManager", "Upload Successful") 
        downloadCallback.callback(url.toString()) 
       } 
      } 
     } 
    } 

回答

2

使用{},您是通过SAM conversion传递一个lambda作为听众。在这个lambda中,你正在定义成功应该发生的事情:你正在创建一个从未使用过的object。在object通过作为听者,使用()

ref.putFile(file).addOnSuccessListener (
    object : OnSuccessListener<UploadTask.TaskSnapshot> { 
     override fun onSuccess(taskSnapshot: UploadTask.TaskSnapshot?) { 
      val url = taskSnapshot?.downloadUrl 
      Log.d("FirebaseManager", "Upload Successful") 
      downloadCallback.callback(url.toString()) 
     } 
    } 
) 

或者只用SAM转换随走,无需创建object明确:

ref.putFile(file).addOnSuccessListener { taskSnapshot -> 
    val url = taskSnapshot?.downloadUrl 
    Log.d("FirebaseManager", "Upload Successful") 
    downloadCallback.callback(url.toString()) 
}