在我从事Java编程的20多年中,我从未遇到过如此令人费解的事情。在以下代码中:
// 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()之后的行。为什么这会发生呢?
是的,在添加if()语句后,我确实重建并重新加载了该应用程序。我什至重启了Android Studio。
答案 0 :(得分:0)
根据我的理解和经验,当代码在调试模式下动态更改时,它将尝试从给出断点的位置再次运行,从而达到调试的目的,而您无需再次触发它。一旦抛出任何异常或手动完成当前线程执行,则它将不会返回if语句。在这种情况下,必须再次触发它以执行所做的更改。
答案 1 :(得分:0)
我将currentUser的声明移到createView()内部,问题消失了。我不明白为什么这应该有所作为,尤其是因为相似应用中的相同代码没有此问题,并且currentUser被声明为全局。