Получить последний узел в базе данных Firebase - PullRequest
0 голосов
/ 21 марта 2019

Я хочу получить доступ к информации о местоположении из последнего добавленного узла в базе данных 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)

1 Ответ

1 голос
/ 21 марта 2019

Чтобы решить эту проблему, используйте следующий код:

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 объекте есть один объект, вы должны выполнить итерацию, чтобы получить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...