Android 空对象引用上的getPackageName()

Android 空对象引用上的getPackageName(),android,android-activity,nullpointerexception,fragment,Android,Android Activity,Nullpointerexception,Fragment,当我从一个片段中打开一个活动时,有时会出现一个错误 因为我从API23知道它应该是getContext,所以出于这个原因,我还对我的代码实现了如下的try-catch authStateListener = new FirebaseAuth.AuthStateListener() { @RequiresApi(api = Build.VERSION_CODES.M) @Override public void onAuthS

当我从一个片段中打开一个活动时,有时会出现一个错误 因为我从API23知道它应该是getContext,所以出于这个原因,我还对我的代码实现了如下的try-catch

authStateListener = new FirebaseAuth.AuthStateListener() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                if(firebaseAuth.getCurrentUser()!=null) {
                    try {
                        Intent intent = new Intent(getContext(), Home_page.class);
                        startActivity(intent);
                    } catch (Exception e) {
                        Intent intent = new Intent(getActivity(), Home_page.class);
                        startActivity(intent);
                    }
                }
            }

但有时它也会在Context.getPackageName()上出现空指针对象引用错误。可能的原因是什么?

异步调用的侦听器可以在调用实体的任何状态下触发。因此,在本例中,您应该首先检查
上下文
isAdded()
中是否存在实体。下面是一个例子

 authStateListener = new FirebaseAuth.AuthStateListener() {
        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            if (firebaseAuth.getCurrentUser() != null) {
                if (getActivity() != null) {
                    Intent intent = new Intent(getActivity(), Home_page.class);
                    startActivity(intent);
                }
            }
        }

你在哪里调用这个代码块。添加整个类。我已将此代码放在firebase auth state Listener=new FirebaseAuth.AuthStateListener(){@RequiresApi(api=Build.VERSION_CODES.M)@重写AuthStateChanged(@NonNull FirebaseAuth FirebaseAuth FirebaseAuth){if(FirebaseAuth.getCurrentUser()!=null){你能发布整个类吗?好的,我会发布整个类什么是异步调用,长官??一个异步调用的调用。你注册了
authStateListener
,用户离开了活动,你没有注销监听器,监听器被调用,
getActivity
返回null。Boom!Firebase提供了添加和删除的方法删除侦听器。要删除侦听器,您必须传递与添加的实例相同的实例。请查看文档。