如何检索Firebase中所有值的列表?

时间:2016-11-12 08:50:00

标签: android arraylist firebase firebase-realtime-database

我正在使用Firebase开发Android应用程序。我需要将下面树中的所有值都变成ArrayList。但是我得到了NullPointerException。我在下面显示了我的数据库和代码。请帮帮我。 它与How to Retrieve a List object from the firebase in android中的问题不同  我试图检索一个字符串而不是对象列表。我无法找到任何这方面的例子。

Here's my firebase database

以下是代码:

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) {

    }
});

对数据库的引用工作正常。我可以毫无困难地添加值。

这是我得到的错误:

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)

2 个答案:

答案 0 :(得分:3)

在你的回调中(假设你想获得person属性):

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) {

    }
});

答案 1 :(得分:2)

getKey()功能在这里是合适的。

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) {

    }
});