申明本人使用的autojs是4.1.1版本
目录
使用text(txt).findOne()导致报错
workbench.desktop.main.js:71 [Extension Host] 10:18:49.662/E: Wrapped java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.view.accessibility.AccessibilityNodeInfo.getPackageName()' on a null object reference ([remote]xfj.js#138)Wrapped java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.view.accessibility.AccessibilityNodeInfo.getPackageName()' on a null object reference at 领取 ([remote]xfj.js:138:0) at [remote]xfj.js:54:0 at file:///android_asset/modules/__bridges__.js:10:0
核心代码
ui.callbackBtn.click(()=>{
领取()
});
function 领取(){
var b = false;
if(点击目标控件和时间("领取",0)){
b = true;
toastLog("成功点击")
}else{
log("未找到点击按钮")
}
return b
}
/**
* @param {控件内容} txt
* @param {时间} kjTime
* @returns true 找到并处理
*/
function 点击目标控件和时间(txt,kjTime){
var srk1;
if(kjTime==0){
srk1 = text(txt).findOne();
}else{
srk1 = text(txt).findOne(kjTime);
}
if(srk1!=null){
srk1 = srk1.bounds();
click(srk1.centerX(), srk1.centerY());
return true;
}else{
return false;
}
}
疑问
正常情况 代码里的这行 srk1 = text(txt).findOne(); 没找到相关描述的控件就一直阻塞,但如果立马切换到其它app就会报错。(切换到系统界面是正常的)。
使用findOnce()函数也是一样的报错。
解决方法及代码
利用try catch思路来解决!
function 领取(){
var b = false;
try{
if(点击目标控件和时间("领取",0)){
b = true;
toastLog("成功点击")
}else{
log("未找到点击按钮")
}
}catch(err){
log("报错了!!!!")
领取();//报错我就重新调用
}
return b
}
结论
使用text(txt).findOne()或是text(txt).findOnce() 只要切换app就会立马报错(测试时,我是人为切换app)。