1

I'm developing an Android application using Firebase. I need to get all the values in the below tree into an ArrayList. But I'm getting NullPointerException. I've shown my database and code below. Please help me out. It is different from the question in How to Retrieve a List object from the firebase in android I'm trying to retreive3 a list of strings and not objects. I can't find any examples for this.

Here's my firebase database

Here's the code:

brandRef=FirebaseDatabase.getInstance().getReferenceFromUrl("https://stockmanager-142503.firebaseio.com/Brands ");
brandRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds: dataSnapshot.getChildren())
            allBrands.add(ds.getValue(String.class));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

The reference to the db works fine. I can add values with no trouble.

Here's the error I'm getting:

FATAL EXCEPTION: main java.lang.NullPointerException at com.strokx.user.stockmanager.AddItemFragment$2.onDataChange(AddItemFragment.java:93)
                                                                                at com.google.android.gms.internal.zzakg.zza(Unknown Source)
                                                                                at com.google.android.gms.internal.zzalg.zzcxk(Unknown Source)
                                                                                at com.google.android.gms.internal.zzalj$1.run(Unknown Source)
                                                                                at android.os.Handler.handleCallback(Handler.java:605)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                                at android.os.Looper.loop(Looper.java:137)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:4517)
                                                                                at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                at java.lang.reflect.Method.invoke(Method.java:511)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
                                                                                at dalvik.system.NativeStart.main(Native Method)
Community
  • 1
  • 1
Judy T Raj
  • 1,755
  • 3
  • 27
  • 41

2 Answers2

3

In your callback (Suppose you want to get person properties then):

brandRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds: dataSnapshot.getChildren()) {

           MeetingUser person = ds.getValue(Person.class);

           String id = person.getId();
           String name= person.getName();

           // Then add the value you require to add in your ArrayList
           allBrands.add(name);
       }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
Reaz Murshed
  • 23,691
  • 13
  • 78
  • 98
Fevly Pallar
  • 3,059
  • 2
  • 15
  • 19
2

getKey() function is appropriate here.

brandRef=FirebaseDatabase.getInstance().getReferenceFromUrl("https://stockmanager-142503.firebaseio.com/Brands ");
brandRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds: dataSnapshot.getChildren())
            allBrands.add(ds.getKey());
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
Reaz Murshed
  • 23,691
  • 13
  • 78
  • 98