getActivity / Toaster

Android 吐司框架,专治 Toast 各种疑难杂症
Apache License 2.0
3.25k stars 406 forks source link

[Bug]: java.lang.NullPointerException: Attempt to invoke interface method #114

Closed billdizl closed 1 year ago

billdizl commented 1 year ago

框架版本【必填】

12.3

问题描述【必填】

当然 已经初始化过了~~~~

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'int com.hjq.toast.config.IToastStyle.getGravity()' on a null object reference at com.hjq.toast.Toaster.setView(Toaster.java:253)

复现步骤【必填】

自定义 Toaster.setView(R.layout.toast_custom_view_toaster); Toaster.setGravity(Gravity.CENTER, 0, 50); Toaster.showShort(object); 非必现,偶现,几率很低

是否必现【必填】

项目 targetSdkVersion【必填】

31

出现问题的手机信息【必填】

Galaxy A02

出现问题的安卓版本【必填】

11

问题信息的来源渠道【必填】

其他渠道

是部分机型还是所有机型都会出现【必答】

部分

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

未选择

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

判断下sToastStyle 如果是空的话 再重新new 一个吧,总不能让它崩溃吧

getActivity commented 1 year ago

小伙子,我看了一下代码,发生这个问题的原因有两种情况:

  1. 曾经调用 Toaster.setStyle(null) 方法
  2. 在调用 Toaster.setView 之前没有调用 Toaster.init 方法初始化框架
getActivity commented 1 year ago

你初始化 Toaster 的时候,是怎么初始化的?是不是做了什么特殊操作?例如闪屏页初始化?或者 Application 开启子线程或者延迟进行初始化?

billdizl commented 1 year ago

在application中初始化,在onCreate中判断了进程,防止多次初始化if (TextNotEmptyUtilsKt.isEmptyNotNull(currentProcessName).equals(AppUtils.getAppPackageName())) { initToast(); },除此之外没有别的操作,在自己的测试机中都没有出现过问题,但是在线上出现了这种问题.当然我查阅了所有的代码,未调用Toaster.setStyle(null)方法

billdizl commented 1 year ago

有没有这么一种可能 ,可能是被GC回收掉了?

getActivity commented 1 year ago

小伙子,强引用是不会被 GC 回收的,所以不会出现这种情况。

getActivity commented 1 year ago

在application中初始化,在onCreate中判断了进程,防止多次初始化if (TextNotEmptyUtilsKt.isEmptyNotNull(currentProcessName).equals(AppUtils.getAppPackageName())) { initToast(); },除此之外没有别的操作,在自己的测试机中都没有出现过问题,但是在线上出现了这种问题.当然我查阅了所有的代码,未调用Toaster.setStyle(null)方法

你先看一下是不是在多进程的情况下使用了 Toaster 框架

billdizl commented 1 year ago

该项目没有使用多进程.建议优化下,判断下用户是否初始化完成,初始化完成才走Toaster逻辑,没有初始化走下Toast原生的方法,这样子也算优化点吧,至少不会因为其他问题崩溃

getActivity commented 1 year ago
image