Android Firebase retrieve data from child node

前端 未结 5 1128
梦谈多话
梦谈多话 2020-12-22 08:00

I\'m trying to get the data from Firebase child node. But it throws Can\'t convert object of type java.lang.String to type uk.co.stableweb.geethika.model.DailyVerse

5条回答
  •  执念已碎
    2020-12-22 08:24

    By this method

    mRef.addChildEventListener(childEventListener);
    

    you subscribe for

    .child("daily_verse");
    

    children. daily_verse has two children: verse_content and verse_title. The type of these children is String. So, you get two String datasnapshot in the onChildAdd listener.

    Update: Try something like this:

    mRef = FirebaseDatabase.getInstance().getReference();
    mRef.keepSynced(true);
    
    ChildEventListener childEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
            Log.d("Child Event,Verse", dataSnapshot.getKey());
            if ("daily_verse".equal(dataSnapshot().getKey){
                dailyVerse = dataSnapshot.getValue(DailyVerse.class);
                Log.d("TEST","Object: "+dailyVerse);
                if (dailyVerse!=null){
                   Log.d("TEST","values: "+dailyVerse.verse_title+", "+dailyVerse.verse_content);
                }
            }
    
        }
    
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
            Log.d("Child Event,Verse", "onChildChanged:" + dataSnapshot.getKey());
            if ("daily_verse".equal(dataSnapshot().getKey){
              dailyVerse = dataSnapshot.getValue(DailyVerse.class);
              Log.d("TEST","Changed object: "+dailyVerse);
              if (dailyVerse!=null){
                 Log.d("TEST","Changed values: "+dailyVerse.verse_title+", "+dailyVerse.verse_content);
              }
            }
        }
    
        @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);
    

    You should subscribe to events from parent object and check the key at events listener.

提交回复
热议问题