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
你应该类似这样去封装数据吧?
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循环闪退报错,可能是由于以下原因之一:
-
数组越界:在for循环中访问数组时,如果索引超出了数组的长度,会导致闪退。确保循环的索引范围正确,避免越界访问。
-
内存泄漏:如果循环中分配了内存但没有正确释放,可能会导致内存耗尽,从而引发闪退。检查循环中是否有内存分配操作,并确保在适当的时候释放内存。
-
空指针异常:如果循环中使用了未初始化或已释放的指针,可能会导致空指针异常。确保所有指针在使用前都已正确初始化。
-
资源管理问题:如果循环中涉及文件、网络连接等资源操作,未正确关闭或释放资源可能会导致闪退。确保在循环结束时正确关闭和释放所有资源。
-
死循环:如果循环条件设置不当,可能会导致死循环,最终导致系统资源耗尽而闪退。检查循环条件,确保循环能够在预期条件下正常退出。
-
异步操作问题:如果循环中包含了异步操作(如网络请求、定时器等),未正确处理异步回调可能会导致闪退。确保异步操作的回调函数能够正确处理所有可能的错误情况。
-
系统资源限制:如果循环中操作的系统资源(如线程、文件句柄等)超过了系统限制,可能会导致闪退。检查循环中使用的系统资源,确保不超过系统允许的上限。
建议检查代码,排查上述可能的原因,确保循环操作的安全性和正确性。