Android Firebase存储PutFile Kotlin崩溃
我的目标是尝试将我从照片库或相机捕获中选择的照片上传到Firebase存储,并将其上传到名为ProfilePictures的bucket/文件夹中 起初,一切都非常顺利,我使用毕加索将图像分配给ImageView和Intent for Camera,除了调用Android Firebase存储PutFile Kotlin崩溃,android,firebase,kotlin,firebase-storage,Android,Firebase,Kotlin,Firebase Storage,我的目标是尝试将我从照片库或相机捕获中选择的照片上传到Firebase存储,并将其上传到名为ProfilePictures的bucket/文件夹中 起初,一切都非常顺利,我使用毕加索将图像分配给ImageView和Intent for Camera,除了调用uploadPhoto()时。应用程序崩溃并在fileReference.putFile(imageUri)…上重新启动 这是我的舱单: <uses-permission android:name="android.permissio
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" />
这是我的堆栈跟踪:
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工具来设置存储,从而将build.gradle应用程序文件中的实现添加到版本16.0.4中 找到-> 然后我看了Firebase Android发行说明: 通过将版本更改为19.1.0,代码现在可以工作了
实现'com.google.firebase:firebase storage:19.1.0'添加logcat堆栈跟踪,以便我们能够识别实际问题如果应用程序崩溃,则存在堆栈跟踪。请在logcat上查找,并将其添加到您的问题中。请同时回复@AlexMamo@AlexMamo堆栈跟踪不在问题中-我已将logcat设置为“仅显示选定的应用程序”,因此在崩溃时被清除。使应用程序再次崩溃并提供它。谢谢@AlexMamo,我已修复了问题,如答案所示。
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)