HarmonyOS 鸿蒙Next 在给组件对象添加监听器时报错 Attempt to invoke virtual method XXX on a null object reference
HarmonyOS 鸿蒙Next 在给组件对象添加监听器时报错 Attempt to invoke virtual method XXX on a null object reference
在实现了Component.ClickedListener
接口并且重写了onClick
方法的MainAbility
类里声明了成员Button
,并在onStart
方法里通过findComponentById(ResourceTable.Id_submit)
方法找到了布局文件中的对应组件(ctrl
点击Id_submit
是能跳转到布局文件的对应位置的),再后来给该对象用.setClickedListener(this)
方法设置监听器时报错。
报错内容为:
java.lang.NullPointerException: Attempt to invoke virtual method 'void ohos.agp.components.Button.setClickedListener(ohos.agp.components.Component$ClickedListener)' on a null object reference
MainAbility
类代码为:
public class MainAbility extends Ability implements Component.ClickedListener {
Button sub;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
sub = findComponentById(ResourceTable.Id_submit);
// 下边这一行报错
sub.setClickedListener(this);
}
@Override
public void onClick(Component component) {
if (component == sub) {
sub.setClickable(false);
}
}
}
很奇怪的是,我之前能正常跑起来的代码在今天发现这个问题后也跑不起来了,报错内容也一致,都是在给组件添加监听器时发生的问题。
更多关于HarmonyOS 鸿蒙Next 在给组件对象添加监听器时报错 Attempt to invoke virtual method XXX on a null object reference的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你好,用你的代码试了一下,我是不能跳转到布局文件的(即找不到Id_submit),我推测也是找不到button这个组件所以报了空指针。解决方法是将这些按钮以及单击事件写在MainAbilitySlice文件下就可以的,因为一个Ability可以有多个Slice,每个Slice又对应一个布局文件,如果直接写在Ability,是找不到布局文件的(大概原理就是这样,如果有说得不对的地方欢迎其他开发者朋友指出)
更多关于HarmonyOS 鸿蒙Next 在给组件对象添加监听器时报错 Attempt to invoke virtual method XXX on a null object reference的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
非常感谢,我把MainAbility
里的代码挪到Slice
里就可以成功跑起来了,看起来是我还没有太搞明白Ability
和Slice
之间的关系,所以把这玩意弄错了。我还处在新手阶段,还得多学习才是[捂脸],最后还是您的感谢帮助!
很开心能够帮助到你,大家一起成长!
欢迎开发小伙伴们进来帮帮楼主
在HarmonyOS鸿蒙Next系统中,给组件对象添加监听器时报错“Attempt to invoke virtual method XXX on a null object reference”,通常意味着你试图在一个尚未初始化(即为null)的对象上调用方法。
这种错误常见于以下几种情况:
-
组件对象未正确初始化:在调用组件的监听器设置方法前,确保该组件已被正确创建并初始化。检查组件的创建代码,确保没有在任何条件分支中遗漏了组件的初始化。
-
布局文件中未定义组件:如果你在代码中引用了布局文件中的组件,确保布局文件里确实定义了该组件,并且ID正确无误。
-
组件查找时机错误:如果你是在组件还未被加载到界面时就尝试查找并设置监听器,会导致找到的对象为null。确保在组件加载完成后(如
onPageStarted
、onElementClick
等生命周期方法中)进行查找和设置。 -
代码逻辑错误:检查代码逻辑,确保在设置监听器前没有任何可能导致组件对象为null的操作。
针对以上情况,逐一排查并修正。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html 。