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局部布局代码




         

错误的赋值方式如下:(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); //转为可访问对象并赋值

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

你可能感兴趣的:(#,autojs异常报错#,解决方法,Auto.js,#,学习,#,实战,android,webview,java)