-2

Meine Datenbank sieht wie folgt aus:Abrufen von Daten aus Firebase in Android

Firebase Databse

Der Code meiner Tätigkeit ist dies:

public class FirebaseActivity extends AppCompatActivity { 

    ListView lv; 

    private FirebaseDatabase database; 
    private DatabaseReference myRef; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_firebase); 

     final List<String> glocations = new ArrayList<String>(); 

     lv = (ListView) findViewById(R.id.lv); 

     database = FirebaseDatabase.getInstance(); 
     myRef = database.getReference(); 
     myRef.child("Users").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Iterable<DataSnapshot> children = dataSnapshot.getChildren(); 

       for (DataSnapshot child: children){ 
        String data = child.getValue(String.class); 
        glocations.add(data); 

       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,glocations); 

     lv.setAdapter(adapter); 
    } 
} 

Nun, wenn ich versuche, die Aktivität von den Einstellungen zu öffnen Menü auf der Hauptaktivität stürzt meine Anwendung ab. Alles was ich tun möchte, ist die Latitude, die Längengrad und die Zeitstempel anzuzeigen, jedes Mal wenn der Benutzer sie in einer Listenansicht ändert, indem er eine einfache Liste mit dem Array-Adapter verwendet. Dies ist eine andere Aktivität und nicht die Hauptaktivität. Der wichtigste funktioniert perfekt. Ich habe unzählige Videos gesehen und kann meinen Fehler nicht verstehen.

Der Fehler ich von logcat bekommen, ist dieses

FATAL EXCEPTION: main Process: com.thanoszoug.geofenceexample, PID: 9954 com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String at com.google.android.gms.internal.zzbqi.zzaD(Unknown Source) at com.google.android.gms.internal.zzbqi.zzb(Unknown Source) at com.google.android.gms.internal.zzbqi.zza(Unknown Source) at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) at com.thanoszoug.geofenceexample.FirebaseActivity$1.onDataChange(FirebaseActivity.java:42) at com.google.android.gms.internal.zzbmz.zza(Unknown Source) at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source) at com.google.android.gms.internal.zzboc$1.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

+0

Wenn Ihre App abstürzt, enthält logcat einen Stack-Trace der Ausnahme. Bitte fügen Sie das zu Ihrer Frage hinzu, um Ihre Chancen auf Hilfe zu verbessern. –

+0

Fertig, danke, dass du es bemerkt hast. –

Antwort

1

glaube ich, die Ausnahme an dieser Linie geworfen wird:

String data = child.getValue(String.class); 

getValue werden Sie den Knoten „Anonymous“ bekommen, und alle Rest der Daten darunter, in Form von HashMap. Da Sie versuchen, es zu String zu analysieren, es wirft man diesen Fehler:

Failed to convert value of type java.util.HashMap to String

Der Grund für das Erhalten der Knotenebene von „Anonymous“ ist, dass Sie ursprünglich Ihre Zuhörer verweisen auf „Benutzer“, und Sie laufen durch seine Kinder mit einer foreach-Schleife, und jeder Wert der Kinder ist auf der Ebene von "Anonymous".

Ich empfehle Ihnen, die Verwendung von String zu überdenken, und zusätzlich, wenn Sie Ihre Standorte Daten abrufen möchten, sollten Sie es durch .child("Anonymous").child("Location").child("-KcU....") in Ihrer eigenen gewohnten Weise zu erreichen.

+0

Ich habe das irgendwie behoben. Mein Problem ist jetzt, ich benutze eindeutige Schlüssel mit .push() in der Hauptaktivität, aber ich möchte die Liste meiner Datenbank in einer anderen Aktivität zeigen. ist eine Möglichkeit, diese Schlüssel zu umgehen, indem Sie das .child ("Anonymous") verwenden. child ("Location"). child ("- KcU ....")? –

Verwandte Themen