我试图遍历“People”子项的每个索引,以将快照的值设置为适配器中的提供程序 . 当用户查看适配器时,他们可以看到人名,年龄,头发颜色和眼睛颜色 .
My Firebase Database Structure(链接因为我还无法嵌入图片)
My Function
public void getInfo() {
ValueEventListener profileListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
totalPeople = dataSnapshot.child("People").getChildrenCount();
for (int personIndex = 0; personIndex < totalPeople; personIndex++){
String name = dataSnapshot.child("People").child(String.valueOf(personIndex)).child("name").getValue().toString();
String age = dataSnapshot.child("People").child(String.valueOf(personIndex)).child("age").getValue().toString();
String hairColor = dataSnapshot.child("People").child(String.valueOf(personIndex)).child("hairColor").getValue().toString();
String eyeColor = dataSnapshot.child("People").child(String.valueOf(personIndex)).child("eyeColor").getValue().toString();
PersonProvider personProvider = new PersonProvider(name, age, hairColor, eyeColor);
personActivityAdapter.add(personProvider);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, "fetching data from firebase failed");
}
};
myRef.child("users").child(userId).addValueEventListener(profileListener);
}
Error
06-06 11:38:21.900 31357-31357/com.RentRedi.RentRedi2 E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.RentRedi.RentRedi2.VehicleActivity$10.onDataChange(VehicleActivity.java:380)
at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
at com.google.android.gms.internal.zzbqx.zzZV(Unknown Source)
at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Attempts
当我改变时:
String name = dataSnapshot.child("People").child(String.valueOf(personIndex)).child("name").getValue().toString();
至:
String name = dataSnapshot.child("People").child(String.valueOf(personIndex)).child("name").toString();
它确实将整个dataSnapshot作为字符串返回,包含其所有键和值 . 但是,当我添加 .getValue()
时,第一次触发personIndex后,我得到一个空指针异常 .
Note: 我也切换了快照的顺序(例如,首先放 age
,先放 hairColor
,或先放 eyeColor
. 它总是得到第一个的值,但在第二个时崩溃,说明该值为空 .
Why is it returning null on the second call, but not the first, no matter which dataSnapshot child I put first?