【问题标题】:getPackageName() on a null object refrence空对象引用上的 getPackageName()
【发布时间】:2018-06-27 09:42:02
【问题描述】:

当我从片段中打开活动时,有时会出现错误 因为我从 API 23 知道它应该是 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() 上给出空指针对象引用错误,这可能是什么原因???

【问题讨论】:

  • 你在哪里调用这个代码块。添加整个班级。
  • 我已将此代码放在 Firebase 身份验证状态侦听器上
  • authStateListener = new FirebaseAuth.AuthStateListener() { @RequiresApi(api = Build.VERSION_CODES.M) @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { if(firebaseAuth.getCurrentUser()!=null ) {
  • 你能把全班都贴出来吗?
  • 好的,我会发布整个课程

标签: android android-activity nullpointerexception fragment


【解决方案1】:

AsyncCall 的监听器可以在调用实体的任何状态下被触发。因此,在这种情况下,您应该首先检查ContextisAdded() 是否存在实体。下面是一个例子。

 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);
                }
            }
        }

【讨论】:

  • 什么是异步调用先生??
  • 异步调用的调用。你注册了authStateListener,用户离开了活动,你没有取消注册监听器,监听器被调用并且getActivity返回null。轰隆隆!
  • Firebase 提供了添加和删除监听器的方法。要删除侦听器,您必须传递已添加的相同实例。查看文档。
猜你喜欢
  • 2020-05-25
  • 2017-12-28
  • 2016-10-28
  • 2016-06-04
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多