EasyWindow icon indicating copy to clipboard operation
EasyWindow copied to clipboard

[Bug]:EasyWindow的mDecorView对象丢失,在findViewById的时候空指针

Open liuqian00070 opened this issue 1 year ago • 4 comments

框架版本【必填】

v10.3

问题描述【必填】

1|Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference -- 2 | at com.hjq.window.EasyWindow.findViewById(EasyWindow.java:1023)

复现步骤【必填】

1、复写BaseDraggable类,实现自己的悬浮窗拖拽逻辑; 2、在onTouch方法中,使用EasyWindow.findViewById方法,会报空指针;

是否必现【必填】

项目 targetSdkVersion【必填】

30

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

aln-al80

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

harmony_os(4.2.0)、android(13)

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

No response

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

huawei(aln-al80) harmony_os(4.2.0)出现概率最高

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

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

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

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

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

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

提供报错堆栈

1
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
2
at com.hjq.window.EasyWindow.findViewById(EasyWindow.java:1023)
3
at com.hjq.window.EasyWindow.setText(EasyWindow.java:1065)
4
at com.sino.frame.home.ui.vm.CGMRecordModel$setCGMDataObserver$1$1$2.invokeSuspend(CGMRecordModel.kt:539)
5
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:30)
6
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
7
at com.openrum.sdk.agent.engine.external.AsynchronousInstrumentation$BrRunnable.run(SourceFile:34)
8
at android.os.Handler.handleCallback(Handler.java:900)
9
at android.os.Handler.dispatchMessage(Handler.java:103)
10
at android.os.Looper.loop(Looper.java:219)
11
at android.app.ActivityThread.main(ActivityThread.java:8673)

提供截图或视频

No response

提供解决方案

No response

liuqian00070 avatar Sep 07 '24 06:09 liuqian00070

关于这种没有复现步骤的问题,我无法判定到底是谁的问题(框架的问题,系统的问题,厂商的问题,个人写法的问题),你需要确定好清楚问题复现步骤或者问题的具体原因,否则你只能自行处理。

getActivity avatar Sep 07 '24 09:09 getActivity

复现步骤: 1、系统悬浮窗,设置setDraggable, EasyWindow .with(BaseApplication.application) .setGravity(Gravity.END) .setContentView(R.layout.home_window_cgm) .setDraggable(CustomSpringDraggable()) 并保存为一个静态变量floatWindow; 2、在一个静态方法中,使用这个静态变量,去设置自定义布局的属性,EasyWindow.setText,然后发现根布局为空; 3、报错空指针:

1 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
2 at com.hjq.window.EasyWindow.findViewById(EasyWindow.java:1023)

liuqian00070 avatar Sep 09 '24 07:09 liuqian00070

你的复现步骤比较复杂,不要光用文字来描述,不然很可能出现的一种情况就是我按照你说的结果无法复现,这种情况我遇到过很多次,正确的做法是直接写一个 Demo 工程上传到 Github issue,我直接跑 Demo 工程来复现。

getActivity avatar Sep 09 '24 16:09 getActivity

不是必现的问题,阿里云崩溃日志统计出来的,目前看估计是存储在静态变量里面,导致根布局丢失导致,我每次调用findViewById前判断一下根布局是否还在吧,感谢。

liuqian00070 avatar Sep 10 '24 05:09 liuqian00070

EasyWindow ob = EasyWindow.with(application); ob.setContentView(R.layout.window_phone) .setGravity(Gravity.END | Gravity.BOTTOM) .setYOffset(200) // 设置指定的拖拽规则 .setDraggable(springBackDraggable) /* .setOnClickListener(android.R.id.icon, new EasyWindow.OnClickListener<ImageView>() {

                @Override
                public void onClick(EasyWindow<?> easyWindow, ImageView view) {
                    Toaster.show("我被点击了");
                    // 点击后跳转到拨打电话界面
                    // Intent intent = new Intent(Intent.ACTION_DIAL);
                    // intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    // toast.startActivity(intent);
                    // 安卓 10 在后台跳转 Activity 需要额外适配
                    // https://developer.android.google.cn/about/versions/10/privacy/changes#background-activity-starts
                }
            })*/
            .show();
     TextView tv = (TextView) ob.findViewById(R.id.tv);
     tv.setText("我改变其值");

这样去找值,EasyWindow.with貌似又创建了一个对象在调用Find是会空

yinwei1992 avatar Oct 25 '24 08:10 yinwei1992

Image Image Image

mDecorView 变量只有三种情况,第一种肯定不为空,第二种你没有设置,最有可能就是第三种,EasyWindow 被回收了,你还去调用 findViewById 方法,所以就会出现为空的情况

getActivity avatar Mar 03 '25 03:03 getActivity

Image

我在下个版本优化一下这个问题,避免外部调用导致内部出现空指针

getActivity avatar Mar 03 '25 04:03 getActivity

该问题已经被优化,更新到最新版本即可解决。

getActivity avatar May 02 '25 17:05 getActivity