Попытка вызвать метод интерфейса для нулевой ссылки на объект в обратном вызове токена Firebase Messaging.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Попытка вызвать метод интерфейса для нулевой ссылки на объект в обратном вызове токена Firebase Messaging.

Сообщение Anonymous »

Я использую Firebase Cloud Messaging (FCM) для запроса токенов push-уведомлений в своем приложении для Android. У меня есть функция requestPushToken, которая принимает в качестве параметра интерфейс обратного вызова OnTokenResult. Предполагается, что этот обратный вызов вызывается со строкой токена, когда токен успешно получен, или с нулевым значением в случае сбоя.
Вот реализация requestPushToken:

Код: Выделить всё

interface OnTokenResult {
void onToken(@Nullable String token);
}

public void requestPushToken(@NonNull OnTokenResult onTokenResult) {
FirebaseMessaging.getInstance().getToken()
.addOnFailureListener(e -> {
onTokenResult.onToken(null);
})
.addOnSuccessListener(token -> {
onTokenResult.onToken(token);
});
}
И вот как я вызываю эту функцию:

Код: Выделить всё

push.requestPushToken(token -> {
//...
sendPushTokenToServer(new PushModel(token, push.getPushType()));
});
Однако у меня часто возникают сбои со следующей ошибкой:

Код: Выделить всё

java.lang.NullPointerException: Attempt to invoke interface method 'IPush$OnTokenResult.onToken(java.lang.String)' on a null object reference
Эта ошибка предполагает, что обратный вызов onTokenResult имеет значение null при его вызове, но я не могу понять, как и почему это могло произойти. Обратный вызов передается как аргумент, отличный от NULL, в метод requestPushToken.
Я пробовал проверить значение NULL перед вызовом обратного вызова, например:

Код: Выделить всё

.addOnSuccessListener(token -> {
if (onTokenResult != null) {
onTokenResult.onToken(token);
}
})
Похоже, что этот подход предотвращает сбои, но мне хотелось бы понять основную причину того, почему onTokenResult может иметь значение null при его вызове. Обходным решением является простая проверка значения null перед вызовом обратного вызова, но она не решает основную проблему.
Кто-нибудь может помочь мне понять, почему я получаю это исключение NullPointerException и что может быть приводит к тому, что обратный вызов onTokenResult становится нулевым?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ase-messag
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»