java - 获取 Firebase 数据库中的最后一个节点

标签 java android firebase firebase-realtime-database

我想访问 Firebase 数据库中最后添加的节点的位置详细信息。您可以在下图中看到。它给出了错误。请告诉我哪里需要改正。

enter image description here

这是我的代码

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)

最佳答案

要解决此问题,请使用以下代码行:

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) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
});

看,我使用了 getChildren() 方法来迭代 DataSnapshot 对象。 logcat 中的结果将是 Location 节点中项目的所有纬度和经度。因此,即使 DataSnapshot 对象中只有一个对象,您也应该迭代才能获取它。

关于java - 获取 Firebase 数据库中的最后一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55280915/

相关文章:

Java spring 框架表单验证

java - redis 订阅者不能与 redis 发布者一起工作

Android M Google API 的使用谷歌地图和其他权限

Android sqlite 使用单选按钮对 ListView 进行排序

javascript - 如何使用网络浏览器呈现 NoSQL 数据中的换行符?

java - 在最后一次出现字符后删除字符串

java - 4 小时后不应访问 Otp

javascript - Jingle 和 webRTC 之间的互操作性

android - Firebase第二次没有向手机发送验证码

android - firebase android 应用程序无法使用移动数据