2016-06-07 16 views
16

Sto usando Firebase per recuperare dati dal database di n utilizzareClasse java.util.Map ha parametri di tipo generico, si prega di utilizzare GenericTypeIndicator invece

Map<String, String> map = dataSnapshot.getValue(Map.class);

per ottenere i valori, ma mostra l'errore

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) 

ecco il codice

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 non c'è pro blem con chiave n valori nel database. utilizzato la soluzione, ma non funziona

risposta

28

L'errore fa notare correttamente dove si sta andando male

Map<String, String> map = dataSnapshot.getValue(Map.class); 

Mappa classe utilizza il parametro per definire i tipi di chiave e Object dove come non si dà loro e semplicemente usare Map.class che fallisce.

Prova il codice qui sotto - in quanto chiave sono sempre archi e siamo in grado di avere qualsiasi tipo di oggetto per loro

Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue(); 
+1

non funziona ancora mostrando lo stesso errore –

+0

puoi aggiornare la tua domanda con il nuovo codice che hai usato? – Shubhank

+0

usa 'getValue()' stai ancora facendo 'getValue (Map.class);' – Shubhank

21

Per introdurre il GenericTypeIndicator, è possibile modificare questa linea:

Map<String, String> map = dataSnapshot.getValue(Map.class); 

in a questo:

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

Questo dovrebbe funzionare nel tuo caso. Per favore, fai un tentativo e fammi sapere.

+0

non funziona ancora mostrando lo stesso errore –

+1

'Mappa map = (Mappa ) dataSnapshot.getValue(); 'avrebbe dovuto funzionare. Ma in ogni caso, ho aggiornato la risposta per mostrare come usare 'GenericTypeIndicator' - puoi provare questo - spero che qualcuno possa trovare utile questo. – ishmaelMakitla

+1

@ishmaelMakitla buona risposta. –

6

Ho avuto lo stesso problema e l'ho risolto gestendo l'oggetto, invece, cercando di farlo incassare da Firebase.

Map <String, String> map = (Map)dataSnapshot.getValue(); 

ha fatto per me.

+0

ha funzionato anche per me. Bella soluzione! –

+0

Grazie !! Ha funzionato per me –

Problemi correlati