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