Auto.js学习笔记10:实例化自定义对象,在子线程使用JSON.stringify()方法导致报错(已解决)

申明本人使用的autojs是4.1.1版本

JSON.stringify()使用导致autojs软件直接奔溃退出。

报错核心局部代码

var sendInfoObj = { //对象
    areaCode        : "John",   //区域参数
    evaInfos        : {},       //过期和即将过期信息
    days            : 1,        //过期天数
    curGroupName    : "",       //当前群
    groupSize       : 0,        //群个数
    size            : 0,        //总个数
    timerState      : false,    //定时发送开关
    timingTime      : "9:00"    //定时发送时间
};

function toString2(){
    log("对象数据是:\n"+JSON.stringify(sendInfoObj));
}


function send_wx_info(evaInfos) {
   var thread2 = threads.start(function(){ 
        // 群发消息
        var i = 0;
        var 定时器 = thread2.setInterval(function(){
            sleep(600);
            var content = '';
            if(i==0){
                content = '*发布时间:'+myUtils.formatDate() +"*\n";
            }
            if(i < sendInfoObj.size){
                setText(content);
                text("发送").click();
            }else{
                toString2();
                /* 结束流程 */
                // back();
                clearInterval(定时器);
                thread2.interrupt();
                exeNextGroup();
                // sleep(2666);
                // exit();
            }
            i++;
        }, 1600);
    });       
 }

toString2()调用导致报错及相关错误信息

子线程调用报错

workbench.desktop.main.js:71 [Extension Host] 10:13:44.865/E: Thread[main (Spawn-1),5]: Wrapped java.lang.IllegalArgumentException: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations (file:///android_asset/modules/__json2__.js#234)Wrapped java.lang.IllegalArgumentException: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations at str (file:///android_asset/modules/__json2__.js:234:0) at str (file:///android_asset/modules/__json2__.js:338:0) at toString2 ([remote]AutoWeiXinNews.js:132:0) at [remote]AutoWeiXinNews.js:496:0

主线程调用报错

JavaException: java.lang.IllegalArgumentException: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations

分析错误原因并解决

通过多次联调,细细排查,确认是对象属性赋值ui控件返回值的问题

UI局部布局代码

<input id = "qunNameIt" singleLine = 'true' text="微信机器人群,机器人群聊2" hint="输入群名或用户名"></input>
<input id = "areaCodeIt" singleLine = "true" hint="例如:自贡市" text='510300-自贡市'></input>
<input id = "countIt" digit="1234567890" singleLine = "true" text = "3" hint="输入过期天次数" ></input>
<input id = "endTxt" text = ""></input>         

错误的赋值方式如下:(myTrim函数是我自定义的不用管它)

 sendInfoObj.days = myUtils.myTrim(ui.countIt.getText().toString());
 sendInfoObj.areaCode = myUtils.myTrim(ui.areaCodeIt.getText().toString());
 sendInfoObj.endHint = ui.endTxt.getText().toString();

正确的赋值方式如下:

 sendInfoObj["days"] = myUtils.myTrim(ui.countIt.getText().toString());
 sendInfoObj["areaCode"] = myUtils.myTrim(ui.areaCodeIt.getText().toString());
 sendInfoObj['endHint'] = ui.endTxt.getText().toString();

ui错误赋值导致报错:

 sendInfoObj['endHint'] = ui.endTxt.getText();切记要加入toString()

正确是这样的: sendInfoObj['endHint'] = ui.endTxt.getText().toString();

总结

当赋值错误后,和赋值相关的错误日志却和赋值没关系是其它错误(这点最头大,很不好确认问题)。

ui布局要使用  sendInfoObj["days"] = myUtils.myTrim(ui.countIt.getText().toString()); 才能进行正确的赋值。

其它值可以 直接以“=”号进行赋值,例如:

var json = res.body.string();//接口获取的json数据
var objj = JSON.parse(json); //转为对象
sendInfoObj.evaInfos = JSON.parse(objj); //转为可访问对象并赋值

目前我看的情况和解决方法就是如此,有大佬可以留言交流。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PYB3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值