HarmonyOS 鸿蒙Next 家人们 帮忙看看 数据获取出来了 for循环直接闪退报错

HarmonyOS 鸿蒙Next 家人们 帮忙看看 数据获取出来了 for循环直接闪退报错

//查询 public queryData(callback: Function,) { let predicates = new relationalStore.RdbPredicates(‘test’); predicates.equalTo(‘NAME’, ‘Tom’); //查询条件 rdbStore.query(predicates, [‘ID’, ‘NAME’, ‘AGE’, ‘SALARY’, ‘CODES’], (err, resultSet) => { if (err) { console.error(查询失败. Code:${err.code}, message:${err.message}); return; } resultSet.goToFirstRow(); //console.info(resultSet.rowCount) for (let i = 0; i < resultSet.rowCount; i++) { console.info(查询成功: ${resultSet.getString(resultSet.getColumnIndex('NAME'))}); console.info(查询成功: ${resultSet.getString(resultSet.getColumnIndex('AGE'))}); console.info(查询成功: ${resultSet.getString(resultSet.getColumnIndex('SALARY'))}); console.info(查询成功: ${resultSet.getString(resultSet.getColumnIndex('CODES'))}); let tmp: AccountData = { id: 0, name: ‘’, age: ‘’, salary: ‘’,codes:’’ }; tmp.id = resultSet.getDouble(resultSet.getColumnIndex(‘id’)); tmp.name = resultSet.getString(resultSet.getColumnIndex(‘NAME’)); tmp.age = resultSet.getString(resultSet.getColumnIndex(‘AGE’)); tmp.salary = resultSet.getString(resultSet.getColumnIndex(‘SALARY’)); tmp.codes = resultSet.getString(resultSet.getColumnIndex(‘CODES’)); resultSet[i] = tmp; resultSet.goToNextRow(); } callback(resultSet); resultSet.close(); }) }

ForEach(this.accounts, (item: AccountData) => { ListItem() { Row() { Text(item.name) Text(item.age) Text(item.salary) Text(item.codes) } }

@State accounts: Array<AccountData> = [];


更多关于HarmonyOS 鸿蒙Next 家人们 帮忙看看 数据获取出来了 for循环直接闪退报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

你应该类似这样去封装数据吧?

resultSet.goToFirstRow();
const result: AccountData[] = [];
for (let i = 0; i < count; i++) {
  let tmp: AccountData = {
    id: 0, accountType: 0, typeText: '', amount: 0
  };
  tmp.id = resultSet.getDouble(resultSet.getColumnIndex('id'));
  tmp.accountType = resultSet.getDouble(resultSet.getColumnIndex('accountType'));
  tmp.typeText = resultSet.getString(resultSet.getColumnIndex('typeText'));
  tmp.amount = resultSet.getDouble(resultSet.getColumnIndex('amount'));
  result[i] = tmp;
  resultSet.goToNextRow();
}
callback(result);

更多关于HarmonyOS 鸿蒙Next 家人们 帮忙看看 数据获取出来了 for循环直接闪退报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


对的 昨天封装错了 自己找到问题了 感谢大佬,

你这样获取数据后,封装进去不对吧

resultSet[i] = tmp;
// 查询
Button(('查询'), { type: ButtonType.Capsule })
  .width(140)
  .fontSize(40)
  .fontWeight(FontWeight.Medium)
  .margin({ top: 20, bottom: 20 })
  .onClick(() => {
    rdbU.queryData((result: AccountData[]) => {
      console.info("返回结果:--------------" + result.toString())
      this.accounts = result;
    })
  })

在HarmonyOS Next中,如果出现for循环闪退报错,可能是由于以下原因之一:

  1. 数组越界:在for循环中访问数组时,如果索引超出了数组的长度,会导致闪退。确保循环的索引范围正确,避免越界访问。

  2. 内存泄漏:如果循环中分配了内存但没有正确释放,可能会导致内存耗尽,从而引发闪退。检查循环中是否有内存分配操作,并确保在适当的时候释放内存。

  3. 空指针异常:如果循环中使用了未初始化或已释放的指针,可能会导致空指针异常。确保所有指针在使用前都已正确初始化。

  4. 资源管理问题:如果循环中涉及文件、网络连接等资源操作,未正确关闭或释放资源可能会导致闪退。确保在循环结束时正确关闭和释放所有资源。

  5. 死循环:如果循环条件设置不当,可能会导致死循环,最终导致系统资源耗尽而闪退。检查循环条件,确保循环能够在预期条件下正常退出。

  6. 异步操作问题:如果循环中包含了异步操作(如网络请求、定时器等),未正确处理异步回调可能会导致闪退。确保异步操作的回调函数能够正确处理所有可能的错误情况。

  7. 系统资源限制:如果循环中操作的系统资源(如线程、文件句柄等)超过了系统限制,可能会导致闪退。检查循环中使用的系统资源,确保不超过系统允许的上限。

建议检查代码,排查上述可能的原因,确保循环操作的安全性和正确性。

回到顶部