La clase java.util.Map tiene parámetros generics de tipo, utilice GenericTypeIndicator en su lugar

Estoy usando firebase para recuperar datos de la base de datos n use

Map map = dataSnapshot.getValue(Map.class);

para obtener valores, pero muestra un error

 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) 

aquí está el código

  DatabaseReference profileRef=mFirebaseRef.child(EEmail); profileRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { --> Map map = (Map)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 no hay problema con los valores n de la clave en la base de datos. usó la solución pero no funcionó

El error indica correctamente dónde te estás equivocando

  Map map = dataSnapshot.getValue(Map.class); 

La clase de mapa usa un parámetro para definir los tipos de Clave y Objeto, ya que no los das y simplemente usa Map.class que falla.

Pruebe el siguiente código, ya que la clave siempre es una cadena y podemos tener cualquier tipo de objeto para ellos

  Map map = (Map) dataSnapshot.getValue(); 

Para presentar GenericTypeIndicator , puede cambiar esta línea:

 Map map = dataSnapshot.getValue(Map.class); 

dentro de esto:

 GenericTypeIndicator> genericTypeIndicator = new GenericTypeIndicator>() {}; Map map = dataSnapshot.getValue(genericTypeIndicator ); 

Esto debería funcionar bien en tu caso. Por favor, inténtalo y házmelo saber.

Tuve el mismo problema y lo resolví manipulando el Objeto en lugar de intentar que Firebase lo lanzara.

 Map  map = (Map)dataSnapshot.getValue(); 

lo hizo por mí.

getCheldrin usar getCheldrin siguiente manera

 for (DataSnapshot snapshotNode: dataSnapshot.getChildren()) { map.put(snapshotNode.getKey(), snapshotNode.getValue(YOUR_CLASS_TYPE.class)); } 

Reemplace YOUR_CLASS_TYPE con el tipo de clase que espera. Observe que esta clase debe tener un constructor vacío.