java - 尝试将图像保存到 Firebase 存储时,我在 android studio 中遇到错误
问题描述
我正在制作一个 android 应用程序,该应用程序的一部分正在为用户保存显示图像。下面的代码块是将图像保存在 Firebase 存储中的方法。我已经在 firebase 中配置了规则,并在清单文件中设置了访问图像的权限。在用户选择图库中的图像后调用该方法。选择图像有效,但保存部分无效。我已经做了很多方法来解决这个问题,但似乎没有任何效果。代码中似乎存在 IDE 无法检测到的错误。错误在运行时。用户在图库中选择图像后,应用程序将关闭。
mStorage 已经在 onCreate 方法中初始化。选择的图像保存在 uriProfileImage 中。uploadProgress 只是一个进度条。
private void uploadImageToFirebaseStorage() {
mStorage = FirebaseStorage.getInstance().getReference();
StorageReference profileImageRef = mStorage.child("displayImages/" + System.currentTimeMillis() + uriProfileImage.getPath().substring(uriProfileImage.getPath().lastIndexOf(".")));
uploadProgress.setVisibility(View.VISIBLE);
if (uriProfileImage != null) {
profileImageRef.putFile(uriProfileImage).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
uploadProgress.setVisibility(View.GONE);
profileImageUrl = taskSnapshot.getDownloadUrl().toString();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
uploadProgress.setVisibility(View.GONE);
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
我得到这个错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: eabalderama.gmail.com.albaytravelguideadministrator, PID: 10812
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzbq;
at com.google.firebase.storage.FirebaseStorage.getInstance(Unknown Source:11)
at eabalderama.gmail.com.albaytravelguideadministrator.EditProfileFragment.uploadImageToFirebaseStorage(EditProfileFragment.java:133)
at eabalderama.gmail.com.albaytravelguideadministrator.EditProfileFragment.onActivityResult(EditProfileFragment.java:123)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:156)
at android.app.Activity.dispatchActivityResult(Activity.java:7690)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4928)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4975)
at android.app.ActivityThread.-wrap20(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1950)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzbq" on path: DexPathList[[zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/base.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_dependencies_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_resources_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_0_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_1_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_2_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_3_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_4_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_5_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_6_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_7_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_8_apk.apk", zip file "/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/lib/arm64, /system/lib64, /vendor/lib64, /product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.google.firebase.storage.FirebaseStorage.getInstance(Unknown Source:11)
at eabalderama.gmail.com.albaytravelguideadministrator.EditProfileFragment.uploadImageToFirebaseStorage(EditProfileFragment.java:133)
at eabalderama.gmail.com.albaytravelguideadministrator.EditProfileFragment.onActivityResult(EditProfileFragment.java:123)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:156)
at android.app.Activity.dispatchActivityResult(Activity.java:7690)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4928)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4975)
at android.app.ActivityThread.-wrap20(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1950)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/eabalderama.gmail.com.albaytravelguideadministrator-S-sF91cNJsjG7a5MWP_EqQ==/split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:353)
at dalvik.system.DexFile.<init>(DexFile.java:100)
at dalvik.system.DexFile.<init>(DexFile.java:74)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374)
这是我在应用程序中的 build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "eabalderama.gmail.com.albaytravelguideadministrator"
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.firebase:firebase-auth:16.0.3'
implementation 'com.google.firebase:firebase-core:16.0.3'
implementation 'com.google.firebase:firebase-database:11.8.0'
implementation 'com.google.firebase:firebase-storage:11.8.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'
}
apply plugin: 'com.google.gms.google-services'
请帮我。我已经尝试了很多方法来解决它,但我根本没有取得任何进展。
解决方案
我找到了解决方案。我发布这个是为了帮助其他有同样问题的人。
问题是我提供的 StorageReference 是错误的。
我把它从
mStorage = FirebaseStorage.getInstance().getReference();
StorageReference profileImageRef = mStorage.child("displayImages/" + System.currentTimeMillis() + uriProfileImage.getPath().substring(uriProfileImage.getPath().lastIndexOf(".")));
至
StorageReference profileImageRef = FirebaseStorage.getInstance().getReference("displayImages/"+System.currentTimeMillis()+".jpg");
似乎以前的 StorageReference 返回了无效的存储引用。我还更新了我的 firebase 存储和数据库依赖项。
另一件事是上面用于获取已上传图片的 downloadUrl 的代码不起作用。
所以我把它从
profileImageUrl = taskSnapshot.getDownloadUrl().toString();
至
profileImageUrl = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
我希望这有帮助。
推荐阅读
- ethereum - 以太坊智能合约。我可以屏蔽/隐藏合同创建者地址吗?如果可以,我需要吗?
- python - 根据索引的字典/映射替换熊猫列中的值
- matlab - 优化涉及 for 循环的 matlab 代码
- python - 如何计算 Python 3 中字典字典中特定值的次数
- flutter - 在 Flutter 中使用控制器设置文本时 TextField 光标不移动
- python-3.x - 为什么在尝试使用 PyPDF2 进行“水印”时,此代码不能按“预期”工作?
- php - html中带有选项卡的PHP标头位置
- python - 如何使用来自预训练 MLP 的最后一个隐藏层权重作为 Keras 的新 MLP(迁移学习)的输入?
- java - 如何编辑 JSch SCP 以将一个文件从远程主机发送到另一台远程主机?
- python - 查找列表的“最佳”项并在 python 中打印第一个实例的索引位置