Je suis en train de suivre le cours Android sur Firebase. Jusque la tout fonctionnait bien mais dans la 2eme partie du cours mon application ne fonctionne plus, au moment ou il faut faire une requete Firestore pour recuperer les information sur l'utilisateur et pouvoir les mettre a jour depuis l'app.
Je suis revenu en arriere plusieurs fois et verifier mon code je suis bloque, mon app bug toujours au meme endroit au moment de recuperer l'utilisateur depuis la base de donnee pour mettre a jour l'UI de ProfileActivity.
ProfileActivity ne se lance pas et jai ceci dans mon stacktrace:
05-05 12:42:00.137 15192-15192/com.openclassrooms.firebaseoc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.openclassrooms.firebaseoc, PID: 15192
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzbq;
at com.google.firebase.firestore.FirebaseFirestore.zze(Unknown Source:2)
at com.google.firebase.firestore.FirebaseFirestore.getInstance(Unknown Source:16)
at com.openclassrooms.firebaseoc.api.UserHelper.getUsersCollection(UserHelper.java:20)
at com.openclassrooms.firebaseoc.api.UserHelper.getUser(UserHelper.java:35)
at com.openclassrooms.firebaseoc.auth.ProfileActivity.updateUIWhenCreating(ProfileActivity.java:97)
at com.openclassrooms.firebaseoc.auth.ProfileActivity.onCreate(ProfileActivity.java:47)
at android.app.Activity.performCreate(Activity.java:7174)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzbq" on path: DexPathList[[zip file "/data/app/com.openclassrooms.firebaseoc-ZRuBFdB0glb-Q95Cz8hMcw==/base.apk"],nativeLibraryDirectories=[/data/app/com.openclassrooms.firebaseoc-ZRuBFdB0glb-Q95Cz8hMcw==/lib/arm64, /system/lib64, /system/vendor/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)
En utilisant de ldebugger j'ai identifier que le code bug au moment de recuperer l'isntance de ma collection sur Firestore depuis ma class UserHelper:
Mon code:
Extrait classe ProfileActivity
private void updateUIWhenCreating(){
if (this.getCurrentUser() != null){
if (this.getCurrentUser().getPhotoUrl() != null) {
Glide.with(this)
.load(this.getCurrentUser().getPhotoUrl())
.apply(RequestOptions.circleCropTransform())
.into(imageViewProfile);
}
String email = TextUtils.isEmpty(this.getCurrentUser().getEmail()) ? getString(R.string.info_no_email_found) : this.getCurrentUser().getEmail();
this.textViewEmail.setText(email);
// 7 - Get additional data from Firestore (isMentor & Username)
UserHelper.getUser(this.getCurrentUser().getUid()).addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
User currentUser = documentSnapshot.toObject(User.class);
String username = TextUtils.isEmpty(currentUser.getUsername()) ? getString(R.string.info_no_username_found) : currentUser.getUsername();
checkBoxIsMentor.setChecked(currentUser.getIsMentor());
textInputEditTextUsername.setText(username);
}
});
}
}
Extrait classe UserHelper
public class UserHelper {
private static final String COLLECTION_NAME = "users";
// --- COLLECTION REFERENCE ---
public static CollectionReference getUsersCollection(){
return FirebaseFirestore.getInstance().collection(COLLECTION_NAME);
}
...
public static Task<DocumentSnapshot> getUser(String uid){
return UserHelper.getUsersCollection().document(uid).get();
}
Project Gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.1.1'
classpath 'io.fabric.tools:gradle:1.25.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://maven.google.com/' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
-Galou