Интерфейс обратного вызова Firebase должен быть объявлен окончательным? - PullRequest
1 голос
/ 14 мая 2019

Ниже приведен код и на одной из строк, android studio просит меня объявить как окончательный

      public void getFullName(GetFullNameCallback getFullNameCallback) { usersRef.child(mAuth.getUid()).child("fN").addListenerForSingleValueEvent(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {

            getFullNameCallback.onCallback(dataSnapshot.getValue().toString());
          }

          @Override
          public void onCancelled(@NonNull DatabaseError databaseError) {}
        });
      }


      private interface GetFullNameCallback {
        void onCallback(String fullName);
      }

На getFullNameCallback.onCallback() в onDataChange он подчеркнут красным, как говорится getFullNameCallback должен быть объявлен окончательным, но согласно этому ответу , это просто прекрасно ??

1 Ответ

0 голосов
/ 14 мая 2019

Как объяснено в Почему в анонимном классе доступны только конечные переменные? , внутри анонимного класса доступны только конечные переменные .

В вашем коде вы получаетеgetFullNameCallback в качестве параметра в методе getFullName (это не локальная переменная внутри кода, которая создает новый экземпляр ValueEventListener).

Более того, вы используете его (getFullNameCallback) внутри анонимный класс ValueEventListener, поэтому getFullNameCallback должен быть final, чтобы его можно было использовать (опять же, объяснено почему в связанном посте).

...