Я пытаюсь получить значение из узла 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)