繁体   English   中英

Firebase Storage PutFile Kotlin 崩溃

[英]Firebase Storage PutFile Kotlin Crashing

我的目标是尝试将我从照片库或相机捕获的照片上传到 Firebase 存储到名为 ProfilePictures 的存储桶/文件夹中。

一开始一切都很好,我使用毕加索将图像分配给 ImageView 和 Intent for Camera,除了我调用uploadPhoto() 应用程序崩溃并在fileReference.putFile(imageUri)...上重新启动。

这是我的清单:

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>
    <uses-feature android:name="android.hardware.camera"
            android:required="true" />

我正在使用 Firebase Storage 版本,它在我的 build.gradle 文件中 -> implementation 'com.google.firebase:firebase-storage:16.0.4'

这是我的代码:

    private var mStorageRef = FirebaseStorage.getInstance().getReference("profilePictures")
private fun uploadFile(name: String, callback: ()->Unit) {
        if (selectedProfileImage != null) {
            val imageUri = selectedProfileImage ?: return
            var fileReference = mStorageRef.child(name + "." + getFileExtension(imageUri))
            println(fileReference)
            fileReference.putFile(imageUri).addOnSuccessListener {
                    println("Profile Image upload Successful")
                    callback()
                }.addOnFailureListener {
                    println("Profile image upload failed")
                    println(it.stackTrace)
                    println(it.localizedMessage)
                    callback()
                }

        } else {
            println("No profile picture selected")
            callback()
        }
    }

这是我的堆栈跟踪:

2019-12-03 14:23:34.521 7580-7761/com.fisherassociates.mt18academy E/AndroidRuntime: FATAL EXCEPTION: FirebaseStorage-Upload-1
    Process: com.fisherassociates.mt18academy, PID: 7580
    java.lang.NoSuchMethodError: No virtual method getToken(Z)Lcom/google/android/gms/tasks/Task; in class Lcom/google/firebase/FirebaseApp; or its super classes (declaration of 'com.google.firebase.FirebaseApp' appears in /data/app/com.fisherassociates.mt18academy-CsL1s9aKJKR7OHyF2sQSHw==/base.apk)
        at com.google.firebase.storage.internal.Util.getCurrentAuthToken(com.google.firebase:firebase-storage@@16.0.4:148)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(com.google.firebase:firebase-storage@@16.0.4:65)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(com.google.firebase:firebase-storage@@16.0.4:57)
        at com.google.firebase.storage.UploadTask.sendWithRetry(com.google.firebase:firebase-storage@@16.0.4:457)
        at com.google.firebase.storage.UploadTask.beginResumableUpload(com.google.firebase:firebase-storage@@16.0.4:257)
        at com.google.firebase.storage.UploadTask.run(com.google.firebase:firebase-storage@@16.0.4:198)
        at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(com.google.firebase:firebase-storage@@16.0.4:1106)
        at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

问题解决了。 我在 Android Studio 中使用 Firebase 工具来设置 Storage,然后将我的 build.gradle 应用程序文件中的实现添加到版本 16.0.4。

找到后 -> java.lang.NoSuchMethodError: No virtual method setTokenProvider

然后我查看了 Firebase Android 发行说明: https ://firebase.google.com/support/release-notes/android

通过将版本更改为 19.1.0,代码现在可以工作了。

实现 'com.google.firebase:firebase-storage:19.1.0'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM