Android FB abrufen von Daten von untergeordneten Knoten
Ich versuche, die Daten aus der FB-Knoten-Kind. Aber es wirft Can't convert object of type java.lang.String to type uk.co.stableweb.geethika.model.DailyVerse
Ausnahme.
Dies ist die Struktur meiner FB-Datenbank.
Hier ist der code. Ich bin mit Android FB neue Dokumentation.
mRef = FirebaseDatabase.getInstance().getReference().child("daily_verse");
mRef.keepSynced(true);
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Log.d("Child Event,Verse", dataSnapshot.getKey());
dailyVerse = dataSnapshot.getValue(DailyVerse.class);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
Log.d("Child Event,Verse", "onChildChanged:" + dataSnapshot.getKey());
dailyVerse = dataSnapshot.getValue(DailyVerse.class);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("Firebase", "onCancelled", databaseError.toException());
Toast.makeText(context, "Failed to load verse",
Toast.LENGTH_SHORT).show();
}
};
mRef.addChildEventListener(childEventListener);
- Und Model-Klasse.
public class DailyVerse {
private String verse_title;
private String verse_content;
public String getVerseTitle() {
return verse_title;
}
public void setVerseTitle(String verse_title) {
this.verse_title = verse_title;
}
public String getVerseContent() {
return verse_content;
}
public void setVerseContent(String verse_content) {
this.verse_content = verse_content;
}
}
Und die LogCat.
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type uk.co.stableweb.geethika.model.DailyVerse
at com.google.android.gms.internal.zzalq.zzd(Unknown Source)
at com.google.android.gms.internal.zzalq.zzb(Unknown Source)
at com.google.android.gms.internal.zzalq.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at uk.co.stableweb.geethika.VerseActivityFragment$1.onChildAdded(VerseActivityFragment.java:63)
at com.google.android.gms.internal.zzahh.zza(Unknown Source)
at com.google.android.gms.internal.zzajh.zzctc(Unknown Source)
at com.google.android.gms.internal.zzajk$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:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Aber wenn ich den Datenbank-Verweis wie folgt. Und Holen Sie sich die dataSnapshot Wert, es packt die Daten.
mRef = FirebaseDatabase.getInstance().getReference("daily_verse");
testVal = (String) dataSnapshot.getValue();
Log.d("TEST", testVal);
V/FA: Activity resumed, time: 278033062
D/Child Event,Verse added: verse_content
D/TEST: විශ්වාසකමේ මාර්ගය තෝරා ගතිමි. ඔබගේ විනිශ්චයන් මා ඉදිරියෙහි තබා ගතිමි.
D/Child Event,Verse added: verse_title
D/TEST: ගීතාවලිය 119:30
Ich denke, es ist möglich, diese Werte mithilfe von HashMap. Aber es war ein Kommentar sagen, es ist nicht mehr empfohlen.
- geben Sie nicht hier, überprüfen Sie den Typ erklären Sie auf der FB-Datenbank für verse_content
- Ich verstehe nicht, ist nicht Android-Datenbank speichern die Werte als json, so Typ string ist richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Achten Sie genau auf die Namen der Eigenschaften in der JSON und Ihre Felder/Getter im Java-code. Wenn Sie nicht übereinstimmen, ist der FB client nicht in der Lage, den Werten entsprechen, die zwischen Ihnen.
Ihre JSON hat
verse_title
undverse_content
, so dass Ihre Java-Klasse muss entweder:oder:
Da FB Android SDK 9.2, können Sie auch kommentieren Sie Ihren Java-code für die Zuordnung zu den korrekten JSON-Eigenschaften. So ein Dritter Weg, um die richtige Zuordnung ist:
Ich habe nicht versucht, die neueste Variante, obwohl, so lassen Sie mich wissen, wenn es gibt Tippfehler, die auf die Antwort.
Durch diese Methode
abonnieren Sie für
Kinder. daily_verse hat zwei Kinder: verse_content und verse_title. Die Art dieser Kinder ist String. So erhalten Sie zwei String-datasnapshot in der onChildAdd Zuhörer.
Update:
Probieren Sie etwas wie dieses:
Sollten Sie abonnieren, um Ereignisse aus übergeordneten Objekts und überprüfen Sie die Schlüssel-bei Veranstaltungen-listener.
Bei der Verwendung eines FB-Modell-Klasse, müssen Sie fügen Sie einen leeren Konstruktor für FB zu arbeiten.
Versuchen Sie, es als
wenn Sie nicht in der Lage sind, Daten abrufen,dann Holen Sie die Daten in diesem format.