当前位置: 首页 > 面试题库 >

Android FragmentManager BackStackRecord.run引发NullPointerException

公羊俊德
2023-03-14
问题内容

使用片段时,有时会出现以下异常:

FATAL EXCEPTION: main
java.lang.NullPointerException
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:591)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4745)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)

当通过尝试从管理器中删除片段时run()BackStackRecord会通过调用of
发生异常execPendingTransactions()

case OP_REMOVE: {
  Fragment f = op.fragment;
  f.mNextAnim = op.exitAnim; <----
  mManager.removeFragment(f, mTransition, mTransitionStyle);
}
break;

我似乎无法弄清楚到底是什么原因造成的?我认为这与删除碎片时未正确清理碎片的堆栈有关。


问题答案:

回答我自己的问题:

(最终)在您致电FragmentTransaction.remove(null);FragmentTransaction.commit();

编辑:而且,就像两次圈出和ShinyuX在评论中指出的一样; 当调用show(null)or
add(null)attach(null)and detach(null)方法时,可能还hide(null)

调用后commit()事务将在FragmentManager中排队。结果,当您在显式调用后正在处理该操作时FragmentManager.executePendingTransactions(),或者在FragmentManager队列线程对其进行调用时,它将引发NullPointerException

就我而言,我是在全局对象中维护碎片状态。在那里,我检查了片段是否显示,然后删除了可见的片段。但是因为我启动了一个新的FragmentActivity,所以这些状态在不可见时仍设置为true。所以这是一个设计错误。

除了解决设计错误外,解决方案还很简单:在删除片段之前检查是否FragmentManager.findFragmentByTag()返回null



 类似资料:
  • 问题内容: 我正在尝试使用IntelliJ 12.1.3使用JPA测试Hibernate 4.2.1.Final,但出现以下错误。 一切似乎都设置正确(我让IntelliJ生成了映射),由于我对Hibernate和JPA的经验为零,所以我无所适从。 为什么要启用NPE? 主类: 错误: Persistance.xml 问题答案: 该消息向我表明它无法连接到数据库。仔细检查您的连接字符串,并确保您的

  • 在我的Spring应用程序中,我使用StandardPasswordEncoder对用户密码进行编码。 我将用户数据保存在嵌入式H2数据库中。

  • 问题内容: 有人看过此消息吗? 在Hibernate论坛上进行了一些讨论,但对于问题可能是什么却不太清楚。 我们正在使用JPA和Spring 3.0.5运行Hibernate 3.6.9。这个异常只是在两个版本之间弹出(就像一天前一样,今天在部署时会引起问题)。这可能与某些错误配置的orm文件有关吗?我们为模型提供了orm.xml文件,为命名查询提供了文件。 问题答案: 因此,我们发现了问题。不幸

  • 问题内容: 我正在使用Spring Boot,Spring Data REST,Hibernate(5.2.12.Final),并将存储库公开为REST服务。 我有一个引发NullPointerException的查询问题,我不明白原因。我正在通过HTTP请求调用此方法(Spring Data REST公开了此方法)。 这是代码: 这是堆栈跟踪: 我确实没有发现该查询有任何问题。我是在做错什么还是

  • departamentdaoimpl.java departamentservice.java DepartamentServiceImpl.java

  • 我是一个在spring boot和ne04j的新蜂。我正在工作的项目包含两个模块web和core。web(包作为一个war)模块包含spring控制器和core(包作为一个jar)模块包含neo4j存储库和域。web模块包含作为一个jar的core模块。当我使用Java-jar web/target/my-project-1.0-snapshot.war运行项目时,它会抛出NullPointerE

  • 问题内容: 多次询问了这个问题,我已经尝试了全部。但不幸的是,两者都没有为我工作。 我正在尝试实现两个活动之间的导航,这是学习Android应用程序开发的一部分。我的最小SDK版本和目标SDK版本分别为11和21(Android 5)。我在AndroidManifest.xml中的设置如下所示: 我有两个活动:MainActivity和DetailActivity。当我单击MainActivity

  • 问题内容: 我有一个Web应用程序,该应用程序具有搜索表单,并且HQL是即时生成的。此外,用户可以单击列标题以根据需要对项目进行排序。一些列从非常深的结构中获取其他数据。 例如,我有这个HQL,它可以完美地工作: 但是这一失败惨败: 有人可以指出,我要去哪里错了。不支持这种深层语法吗? hibernate版本是3.2.1。 抱歉,忘记了堆栈跟踪: 问题答案: 正如@JBNizet正确指出的那样,问