La classe java.util.La carte a des paramètres de type générique, veuillez utiliser GenericTypeIndicator au lieu
Je suis à l'aide de firebase pour récupérer des données à partir de la base de données de l'utilisation de n
Map<String, String> map = dataSnapshot.getValue(Map.class);
pour obtenir des valeurs, mais il indique une erreur
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rana.sahaj.myyu, PID: 13179
com.google.firebase.database.DatabaseException: Class java.util.Map has generic type parameters, please use GenericTypeIndicator instead
at com.google.android.gms.internal.zzaix.zzb(Unknown Source)
at com.google.android.gms.internal.zzaix.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.rana.sahaj.myyu.profile.Profile$2.onDataChange(Profile.java:158)
at com.google.android.gms.internal.zzafp.zza(Unknown Source)
at com.google.android.gms.internal.zzagp.zzSu(Unknown Source)
at com.google.android.gms.internal.zzags$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5052)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
voici le code
DatabaseReference profileRef=mFirebaseRef.child(EEmail);
profileRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
--> Map<String, String> map = (Map<String,String>)dataSnapshot.getValue(Map.class);
name = (TextView)findViewById(R.id.UserInActivity);
EmailView= (TextView)findViewById(R.id.emailUser);
PhotoUrl = map.get("picurl");
emmaill=map.get("userEmail");
UserNam = map.get("userNAME");
name.setText(UserNam);
EmailView.setText(emmaill);
}
@Override
public void onCancelled(DatabaseError firebaseError) {
}
});
n il n'y a pas de problème avec la clé n valeurs dans la base de données.
utilisé la solution, mais ne fonctionne pas
Vous devez vous connecter pour publier un commentaire.
L'erreur signale correctement dans le cas où vous êtes mal à l'
Classe Map utilise le paramètre de définir les types de Clés et d'Objets où tant que vous ne leur donnez pas et utilisez simplement
Map.class
qui échoue.Essayer le code ci-dessous -, puisque les Clés sont toujours à la chaîne et que nous pouvons avoir n'importe quel type d'Objet pour eux
getValue()
vous êtes encore en train de fairegetValue(Map.class);
Pour introduire le
GenericTypeIndicator
, vous pouvez modifier cette ligne:à ceci:
Cela devrait bien fonctionner dans votre cas. S'il vous plaît donner un essai et laissez-moi savoir.
Map<String, String> map = (Map<String, Object>) dataSnapshot.getValue();
doit avoir travaillé. Mais en tout cas, j'ai mis à jour la réponse à montrer comment utiliserGenericTypeIndicator
- vous pouvez l'essayer - j'espère que quelqu'un peut aussi trouver cela utile.J'ai eu le même problème et résolu par la manipulation de l'Objet au lieu d'essayer d'avoir Firebase jeter.
a fait pour moi.
Vous devez utiliser le
getCheldrin
comme suitRemplacer le
YOUR_CLASS_TYPE
avec le type de classe vous attend. notez que cette classe doit avoir un constructeur vide.En raison de la façon dont Java implémente les génériques (type-erasure), il est nécessaire d'utiliser un peu plus compliqué méthode pour résoudre correctement les types génériques des collections en cours d'exécution. Pour résoudre ce problème, Firebase Base de données accepte les sous-classes de cette classe dans les appels à getValue (getValue(GenericTypeIndicator), getValue(GenericTypeIndicator)) et renvoie une correctement tapé collection générique.
Comme un exemple, vous pourriez faire quelque chose comme cela pour obtenir une liste des instances de Message à partir d'un DataSnapshot: