我试图遍历“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?