我想从Firebase数据库中最后添加的节点访问位置详细信息。您可以在下图看到。它给的错误。请告诉我要纠正的地方。
这是我的代码
DatabaseReference dbReference = FirebaseDatabase.getInstance().getReference();
Query lastQuery = dbReference.child("User").child("Location").orderByKey().limitToLast(1);
lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
LatLng prevloc = new LatLng(
dataSnapshot.child("latitude").getValue(Double.class),
dataSnapshot.child("longitude").getValue(Double.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是错误
03-21 18:32:10.328 1093-1093/com.jkweblander.mapviewex E/dalvikvm: Could not find class 'dalvik.system.DelegateLastClassLoader', referenced from method ab.b
03-21 18:32:14.068 1093-1093/com.jkweblander.mapviewex E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jkweblander.mapviewex, PID: 1093
java.lang.NullPointerException
at com.jkweblander.mapviewex.MapsActivity$2.onDataChange(MapsActivity.java:240)
at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@16.1.0:183)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.1.0:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.1.0:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.1.0:55)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5653)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
要解决此问题,请使用以下代码:
DatabaseReference dbReference = FirebaseDatabase.getInstance().getReference();
Query lastQuery = dbReference.child("User").child("Location").orderByKey().limitToLast(1);
lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
double lat = ds.child("latitude").getValue(Double.class);
double lng = ds.child("longitude").getValue(Double.class);
LatLng prevloc = new LatLng(lat, lng);
Log.d(TAG, lat + ", " + lng);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
看,我已经使用getChildren()
方法来遍历DataSnapshot
对象。 logcat中的结果将是Location
节点内项目的所有纬度和经度。因此,即使您的DataSnapshot
对象中只有一个对象,您也应该对其进行迭代以获取它。