Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
liuqian00070 opened this issue Sep 7, 2024 · 5 comments
Labels
bug Something isn't working

Comments

@liuqian00070
Copy link

框架版本【必填】

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 liuqian00070 added the bug Something isn't working label Sep 7, 2024
@getActivity
Copy link
Owner

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

@liuqian00070
Copy link
Author

复现步骤:
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)

@getActivity
Copy link
Owner

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

@liuqian00070
Copy link
Author

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

@yinwei1992
Copy link

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() {

                @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是会空

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants