Reputation: 41
I am making an android app and part of this app is saving a display image for the user. The block of code below is the method for saving the image in the firebase storage. I've already configured the rules in the firebase and put a permission of accessing images in the manifest file. The method is being called after the user has chosen an image in the gallery. Choosing the image works but the saving part doesn't. I've done a lot of ways to solve the problem but nothing seems to work. There seems to be an error in the code that the IDE can't detect. The error is in the runtime. The app closes after the user choose an image in the gallery.
the mStorage have already been initialized in the onCreate method. The image chosen is being saved in the uriProfileImage. the uploadProgress is just a progress bar.
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();
}
});
}
and i get this error
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)
and this is my build.gradle in app
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'
Please help me. I've tried lots of ways to solve it but im not doing any progress at all.
Upvotes: 3
Views: 833
Reputation: 41
I found a solution guys. Im posting this to help others to who have the same problem.
The problem is that the StorageReference that i provided is the error.
I changed it from
mStorage = FirebaseStorage.getInstance().getReference();
StorageReference profileImageRef = mStorage.child("displayImages/" + System.currentTimeMillis() + uriProfileImage.getPath().substring(uriProfileImage.getPath().lastIndexOf(".")));
to
StorageReference profileImageRef = FirebaseStorage.getInstance().getReference("displayImages/"+System.currentTimeMillis()+".jpg");
It seems like that the previous StorageReference returns an invalid storage reference. I have also updated my firebase storage and database dependencies.
And another thing is that the code above for getting the downloadUrl for the uploaded image doesn't work.
So I changed it from
profileImageUrl = taskSnapshot.getDownloadUrl().toString();
to
profileImageUrl = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
I hope this helps.
Upvotes: 1