Java if () утверждение всегда ложно? - PullRequest
1 голос
/ 01 мая 2020

За 20 с лишним лет, которые я программировал в Java, я никогда не сталкивался с такими загадочными вещами, как эта. В следующем коде:

        // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
    currentUser = mAuth.getCurrentUser();
    if (currentUser == null) {
        LoginManager.getInstance().logOut();
        LoginFragment loginFragment = new LoginFragment();
        FragmentManager manager = getActivity().getSupportFragmentManager();
        manager.beginTransaction().replace(R.id.fragment_container, loginFragment, loginFragment.getTag()).commit();
        return view;
    }
    firebase_userID = currentUser.getUid();

Я устанавливаю точку останова в операторе if (), а когда я туда попадаю, я устанавливаю переменную currentUser в null. Когда я продолжаю выполнение, оператор LoginManager.getInstance (). LogOut () должен выполняться, верно? Вместо этого код падает до строки после if (). С какой стати это должно происходить ??

Чтобы доказать, что я не сплю, вот соответствующие скриншоты: enter image description here и enter image description here

И да, я перестроил и перезагрузил приложение после добавления оператора if (). Я даже перезапустил Android Studio.

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Я переместил объявление currentUser внутрь createView (), и проблема исчезла. Я не понимаю, почему это должно иметь значение, тем более что идентичный код в похожем приложении не имеет этой проблемы, а currentUser объявлен глобальным.

0 голосов
/ 01 мая 2020

Согласно моему пониманию и опыту, когда код изменяется динамически в режиме отладки, он пытается снова запустить его с точки, где задана точка останова, так что цель отладки выполняется, и вам не нужно запускать его снова. Как только выдается какое-либо исключение или выполняется текущее выполнение потока вручную, оно не возвращается к оператору if. В этом случае его необходимо повторно запустить для выполнения с внесенными изменениями.

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