addListenerForSingleValueEvent с помощью пользовательского обратного вызова в onKeyEnteredMethod: по-прежнему не получается значение, которое я хочу - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь получить значение из узла firebase и получить его в методе onKeyEntered () для дальнейших манипуляций.

Я понял, что мне нужен пользовательский обратный вызов из этого ответа (https://stackoverflow.com/a/47853774/10076702). Однако код все еще не работает, как я ожидал.

    @Override
    public void onKeyEntered(final String key, final GeoLocation location) {

        Toast.makeText(StudentMapsActivity.this, "onKeyEntered", Toast.LENGTH_SHORT).show();

        readTrack(new MyCallBack() {
            @Override
            public void onCallBack(String track1) {
                try {
                    String track = track1;
                    Log.e("onKeyEntered",track);
                } catch (Exception e) {
                    Log.e("onCallBack","No track specified");
                }
            }
        }, key);
    }


    public interface MyCallBack{
        void onCallBack(String track);
    }

    private void readTrack(final MyCallBack myCallBack, String key){
        driversAvailableDatabaseRef.child(key).child(getString(R.string.track)).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String track = dataSnapshot.getValue(String.class);
                myCallBack.onCallBack(track);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("readTrack", databaseError.getMessage());
            }
        });
    }

Я всегда получаю тост "onKeyEntered", когда вводится ключ. Тем не менее, я получаю это в logcat

2019-04-26 14:50:35.677 30310-30310/com.example.android.gpstrackerdemo E/onKeyEntered: green
2019-04-26 14:51:07.039 30310-30310/com.example.android.gpstrackerdemo E/onCallBack: No track specified
2019-04-26 14:52:06.345 30310-30310/com.example.android.gpstrackerdemo E/onCallBack: No track specified

Когда ключ уже существует в базе данных, я получаю название трека, но когда вводится новый ключ, я получаю «Трек не указан»

Это моя база данных (https://ibb.co/Y77HWqt)

Буду признателен за любую помощь, пожалуйста.


Edit: Это то, что я получаю после регистрации ошибки

readTrack(new MyCallBack() {
            @Override
            public void onCallBack(String track) {
                try {
                    String track1 = track;
                    Log.e("onKeyEntered",track1);
                } catch (Exception e) {
                    Log.e("readTrack","error reading track",e);
                }
            }
        }, key);
2019-04-27 11:07:36.646 11454-11454/com.example.android.gpstrackerdemo E/readTrack: error reading track
    java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.e(Log.java:312)
        at com.example.android.gpstrackerdemo.StudentMapsActivity$6.onCallBack(StudentMapsActivity.java:317)
        at com.example.android.gpstrackerdemo.StudentMapsActivity$7.onDataChange(StudentMapsActivity.java:366)
        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:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

...