使用片段中的处理程序时出现非法状态异常

Posted

技术标签:

【中文标题】使用片段中的处理程序时出现非法状态异常【英文标题】:Illegal State Exception while using Handler from Fragment 【发布时间】:2018-10-04 14:45:52 【问题描述】:
java.lang.IllegalStateException: 
  at android.support.v4.app.Fragment.startActivity (Unknown Source)
  at placecom.learnenglish.appintro.b$1.run (Unknown Source)
  at android.os.Handler.handleCallback (Handler.java:751)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:186)
  at android.app.ActivityThread.main (ActivityThread.java:6509)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:914)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:804)

好的,所以这个问题现在已经占用了我超过 24 小时的时间。我知道这是一个小问题,我做错了什么。 Firebase crashlytics 还在下面说,可能出了什么问题?有人可以帮忙吗?

Fatal Exception: java.lang.IllegalStateException
Fragment bc91d8cf not attached to Activity

这是我的代码截图:

【问题讨论】:

你把代码放在哪里了?在片段的 onCreate 内? onStart() 内 尝试将代码移至 onAttach 也许在 onDestroy 中取消你的回调? 【参考方案1】:

当你在片段中做某事时,添加这个方法来检查是否附加。

if (isAdded()) 
// TODO Your Stuff

【讨论】:

【参考方案2】:

据了解,最可能的原因是 getActivity() 返回 null。这可能是因为当计时器完成时,片段不再附加。试试这个:

Activity activity=getActivity()
if(activity!=null&&isAdded()))
  // ur code here

这样它不会崩溃,但它也可能不适合您的目的。

【讨论】:

是的,这可以防止崩溃。但是,不完全是我需要的。 很可能您需要重新考虑您的工作流程,因为如果获取活动为空,您将无能为力。

以上是关于使用片段中的处理程序时出现非法状态异常的主要内容,如果未能解决你的问题,请参考以下文章

关闭从另一个对话框片段启动的对话框片段会导致非法状态异常

在 fragmenStatePagerAdapter 的嵌套片段中,非法状态异常-指定的子级已经有父级

在我的跑步者类中将标签作为黄瓜选项提供时出现“java.lang.String”错误的非法初始化程序

jython 中的 SSL 非法状态异常

从api流明获取数据时出现错误的非法字符串偏移[重复]

PatternSyntaxException:在 Java 中使用正则表达式时出现非法重复