微信小游戏构造出来提示错误,那些大哥帮忙看看

如题,构造后在微信开发者工具打开提示错误。在cocos是正常的。
IMG_20231224_232439

获取存档要判断是不是null,再用JSON去转

sys.localStorage.getItem,在cocos中,空返回的是null,在微信中,空返回的是 “”,看看是不是这个问题。

1赞

那应该怎么操作呢

需要怎么操作呢

image 这样判断下

var data = 读出来的存档
if(data != null){
var ob = JSON.parse xxx
}

image 直接点可以这样

我不推荐游戏代码大量使用 try catch, 会影响性能和代码可读性。
但对于文件和数据解析这一类,推荐用 try catch 做一个保险。 因为我们根本无法预测数据的合法性。

let jsonData:any = {};
try{
    jsonData = JSON.parse(sys.localStorage.getItem('xxxx'));
}
catch(e){
    jsonData = {};
}

最好做一个静态类 SafeJSON 来处理类似的情况。
新建一个文件, SafeJSON.ts,然后把下面的内容复制进去。

export class SafeJSON{
    public static parse(str: string): any {
        let ret = {};
        try {
            ret = JSON.parse(str);
        }
        catch (e) {
            ret = {};
        }
        return ret;
    }

    public static stringify(obj: any): string {
        let ret = "";
        try{
            ret = JSON.stringify(obj);
        }
        catch(e){
            ret = "";
        }
        return ret;
    }
}

外部用的时候, SafeJSON.parse, SafeJSON.stringify 就可以了。

听懂,掌声!

window.datamgr = {
subString:function(str,len){

}
window.addupdata_yzp = cc.sys.localStorage.getItem(“addupdata_yzp”);

set_addupdata_yzp(data, index){

}

下面还有一段
cc.Class({
properties: {
uidStorage:null,
localStorage:null,
uidKey:“uid”,
localStorageKey:“localStorage”,
},
ctor(){
this.init();
},
init(){
this.uidStorage = {};
this.localStorage = {
uid:0
};
var localStorage = JSON.parse(cc.sys.localStorage.getItem(this.localStorageKey));
if(localStorage){
for(var key in localStorage){
this.localStorage[key] = localStorage[key];
}
}
//部分数据绑定到uid上,个人设置等
var uidStorage = JSON.parse(cc.sys.localStorage.getItem(this.uidKey + “" + this.uid));
if(uidStorage){
for(let key in uidStorage){
this.uidStorage[key] = uidStorage[key];
}
}
},
setUidItem(key,value){
this.uidStorage[key] = value;
this.saveUidItem();
},
setItem(key,value){
this.localStorage[key] = value;
this.saveItem();
},
getUidItem(key){
return this.uidStorage[key];
},
getItem(key){
return this.localStorage[key];
},
saveUidItem(){
var str = JSON.stringify(this.uidStorage);
cc.sys.localStorage.setItem(this.uidKey + "
” + this.uid,str);
},
saveItem(){
var str = JSON.stringify(this.localStorage);
cc.sys.localStorage.setItem(this.localStorageKey,str);
},
cleanUidItem(){
cc.sys.localStorage.removeItem(this.uidKey + “_” + this.uid);
},
cleanItem(){
cc.sys.localStorage.removeItem(this.localStorageKey);
}
});

我把代码贴出来了,麻烦帮忙看看怎么改呢

window.datamgr = {
subString:function(str,len){

}
window.addupdata_yzp = cc.sys.localStorage.getItem(“addupdata_yzp”);

set_addupdata_yzp(data, index){

}

下面还有一段
cc.Class({
properties: {
uidStorage:null,
localStorage:null,
uidKey:“uid”,
localStorageKey:“localStorage”,
},
ctor(){
this.init();
},
init(){
this.uidStorage = {};
this.localStorage = {
uid:0
};
var localStorage = JSON.parse(cc.sys.localStorage.getItem(this.localStorageKey));
if(localStorage){
for(var key in localStorage){
this.localStorage[key] = localStorage[key];
}
}
//部分数据绑定到uid上,个人设置等
var uidStorage = JSON.parse(cc.sys.localStorage.getItem(this.uidKey + “ " + this.uid));
if(uidStorage){
for(let key in uidStorage){
this.uidStorage[key] = uidStorage[key];
}
}
},
setUidItem(key,value){
this.uidStorage[key] = value;
this.saveUidItem();
},
setItem(key,value){
this.localStorage[key] = value;
this.saveItem();
},
getUidItem(key){
return this.uidStorage[key];
},
getItem(key){
return this.localStorage[key];
},
saveUidItem(){
var str = JSON.stringify(this.uidStorage);
cc.sys.localStorage.setItem(this.uidKey + "
” + this.uid,str);
},
saveItem(){
var str = JSON.stringify(this.localStorage);
cc.sys.localStorage.setItem(this.localStorageKey,str);
},
cleanUidItem(){
cc.sys.localStorage.removeItem(this.uidKey + “_” + this.uid);
},
cleanItem(){
cc.sys.localStorage.removeItem(this.localStorageKey);
}
});

麻烦看看怎么改哇

看不懂,不过谢谢了。 :sweat_smile:

有人吗,帮忙看看

image 把这个做一下判空处理 就好了

用if(值=0)这样吗

感觉像是半路出家的 :joy:

这都被你发现了,其实我啥都不太懂

看下这个写法, ok 吗 ?

// 数据管理模块
const DataMgr = {
  /**
   * 截取字符串
   * @param {string} str - 要截取的字符串
   * @param {number} len - 截取的长度
   * @returns {string} - 截取后的字符串
   */
  subString: function (str, len) {
    // 在这里进行字符串截取操作
    // 进行空值判断,确保 str 不为空
    if (!str) return '';

    return str.substring(0, len);
  },

  /**
   * 设置 addupdata_yzp 数据项
   * @param {*} data - 要设置的数据
   * @param {*} index - 数据索引
   */
  set_addupdata_yzp: function (data, index) {
    // 在这里设置 addupdata_yzp 数据项
    // 你的具体逻辑
  }
};

window.datamgr = DataMgr;

// 数据持久化管理类
cc.Class({
  properties: {
    uidStorage: null,
    localStorage: null,
    uidKey: "uid",
    localStorageKey: "localStorage",
  },

  /**
   * 构造函数
   */
  ctor() {
    this.init();
  },

  /**
   * 初始化
   */
  init() {
    this.uidStorage = {};
    this.localStorage = {
      uid: 0
    };

    // 从本地存储中读取 localStorage 数据
    const localStorageData = JSON.parse(cc.sys.localStorage.getItem(this.localStorageKey));
    if (localStorageData) {
      Object.assign(this.localStorage, localStorageData);
    }

    // 从本地存储中读取 uidStorage 数据
    const uidStorageData = JSON.parse(cc.sys.localStorage.getItem(`${this.uidKey} ${this.uid}`));
    if (uidStorageData) {
      Object.assign(this.uidStorage, uidStorageData);
    }
  },

  /**
   * 设置 uidStorage 中的项
   * @param {string} key - 要设置的键名
   * @param {*} value - 要设置的值
   */
  setUidItem(key, value) {
    if (!key) return; // 空值判断

    this.uidStorage[key] = value;
    this.saveUidItem();
  },

  /**
   * 设置 localStorage 中的项
   * @param {string} key - 要设置的键名
   * @param {*} value - 要设置的值
   */
  setItem(key, value) {
    if (!key) return; // 空值判断

    this.localStorage[key] = value;
    this.saveItem();
  },

  /**
   * 获取 uidStorage 中的项
   * @param {string} key - 要获取的键名
   * @returns {*} - 获取到的值
   */
  getUidItem(key) {
    return this.uidStorage[key];
  },

  /**
   * 获取 localStorage 中的项
   * @param {string} key - 要获取的键名
   * @returns {*} - 获取到的值
   */
  getItem(key) {
    return this.localStorage[key];
  },

  /**
   * 保存 uidStorage 中的数据到本地存储
   */
  saveUidItem() {
    const str = JSON.stringify(this.uidStorage);
    cc.sys.localStorage.setItem(`${this.uidKey} ${this.uid}`, str);
  },

  /**
   * 保存 localStorage 中的数据到本地存储
   */
  saveItem() {
    const str = JSON.stringify(this.localStorage);
    cc.sys.localStorage.setItem(this.localStorageKey, str);
  },

  /**
   * 清除 uidStorage 中的数据
   */
  cleanUidItem() {
    cc.sys.localStorage.removeItem(`${this.uidKey} ${this.uid}`);
  },

  /**
   * 清除 localStorage 中的数据
   */
  cleanItem() {
    cc.sys.localStorage.removeItem(this.localStorageKey);
  }
});

感谢大家,已经解了,不是你们说的问题只是符号没对

1赞