getActivity / Toaster

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

Bugly 上报setView must have been called #70

Closed RamboMing closed 3 years ago

RamboMing commented 3 years ago

您好,非常感谢作者的开源奉献。我在使用该框架时,部分机器会报错(主要集中在Android9-11的华为和OPPO手机)

945276 java.lang.RuntimeException

setView must have been called android.widget.Toast.show(Toast.java:156) com.safewaychina.safeye.toast.ToastStrategy.handleMessage(SourceFile:12) android.os.Handler.dispatchMessage(Handler.java:107) android.os.Looper.loop(Looper.java:230) android.app.ActivityThread.main(ActivityThread.java:7886) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)

getActivity commented 3 years ago

小伙子,能提供一下具体的复现步骤么?

RamboMing commented 3 years ago

抱歉,我本地项目也没复现出来。这是项目线上日志收集到日志,应该不是必现的bug。之前未升级到9.0之前,未见上报这个问题,可能是我们项目应用使用场景触发

getActivity commented 3 years ago

小伙子,我看了一下你给的堆栈,你应该是直接 Copy 框架的代码放到项目中,在这块你有没有做什么修改呢?

RamboMing commented 3 years ago

由于项目buildtoolsVersion是28, 修改三处: 1.这个里面ToastStrategy 修改 if (toast instanceof ActivityToast || Build.VERSION.SDK_INT < Build.VERSION_CODES.P || application.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.P) { toast.setView(mToastStyle.createView(application)); toast.setGravity(mToastStyle.getGravity(), mToastStyle.getXOffset(), mToastStyle.getYOffset()); toast.setMargin(mToastStyle.getHorizontalMargin(), mToastStyle.getVerticalMargin()); }

  1. 这里IToast 改成接口形式SystemToast实现findTextView和findMessageView
  2. 这里SystemToast setText(CharSequence text)方法禁用 super.setText(text) 因为有错误日志上报提示: This Toast was not created with Toast.makeText() android.widget.Toast.setText(Toast.java:338) com.safewaychina.safeye.toast.SystemToast.setText(SourceFile:73) 附件链接是我拷贝修改后的代码 ToastUtil.zip
getActivity commented 3 years ago

@RamboMing 全部改回去,如果后面还有问题,你再联系我,因为你改了这块的代码,我很难判断问题出在哪里的。

getActivity commented 3 years ago

小伙子,还有其他问题不,没有的话我就关闭 issue 了。