HarmonyOS 鸿蒙5.0代码迁移问题:鸿蒙4.0没问题的代码,到鸿蒙5.0校验不通过。要怎么修改呢?
HarmonyOS 鸿蒙5.0代码迁移问题:鸿蒙4.0没问题的代码,到鸿蒙5.0校验不通过。要怎么修改呢?
<markdown _ngcontent-cvl-c149="" class="markdownPreContainer">
代码如下:
// 数据操作放在model目录下
import relationalStore from '@ohos.data.relationalStore';
import TaskInfo from '../viewmodel/TaskInfo';
class TaskModel {
private rdbStore?: relationalStore.RdbStore
private tableName: string = 'TASK'
/**
* 初始化任务表
*/
initTaskDB(context){
// 1.rdb配置
const config = {
name: 'MyApplication.db',
securityLevel: relationalStore.SecurityLevel.S1
}
// 2.初始化SQL语句
const sql = `CREATE TABLE IF NOT EXISTS TASK (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
NAME TEXT NOT NULL,
FINISHED bit
)`
// 3.获取rdb
relationalStore.getRdbStore(context, config, (err, rdbStore) => {
if(err){
console.log('testTag', '获取rdbStore失败!')
return
}
// 执行Sql
rdbStore.executeSql(sql)
console.log('testTag', '创建task表成功!')
// 保存rdbStore
this.rdbStore = rdbStore
})
}
/**
* 查询任务列表
*/
async getTaskList(){
// 1.构建查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
// 2.查询
let result = await this.rdbStore?.query(predicates, ['ID', 'NAME', 'FINISHED'])
// 3.解析查询结果
// 3.1.定义一个数组,组装最终的查询结果
let tasks: TaskInfo[] = []
// 3.2.遍历封装
if(result !== undefined){
while(!result.isAtLastRow){
// 3.3.指针移动到下一行
result.goToNextRow()
// 3.4.获取数据
let id = result.getLong(result.getColumnIndex('ID'))
let name = result.getString(result.getColumnIndex('NAME'))
let finished = result.getLong(result.getColumnIndex('FINISHED'))
// 3.5.封装到数组
tasks.push({ id, name, finished: !!finished})
}
}
console.log('testTag', '查询到数据:', JSON.stringify(tasks))
return tasks
}
/**
* 添加一个新的任务
* [@param](/user/param) name 任务名称
* [@returns](/user/returns) 任务id
*/
addTask(name: string): Promise<number>{
return this.rdbStore.insert(this.tableName, {name, finished: false})
}
/**
* 根据id更新任务状态
* [@param](/user/param) id 任务id
* [@param](/user/param) finished 任务是否完成
*/
updateTaskStatus(id: number, finished: boolean) {
// 1.要更新的数据
let data = {finished}
// 2.更新的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('ID', id)
// 3.更新操作
return this.rdbStore.update(data, predicates)
}
/**
* 根据id删除任务
* [@param](/user/param) id 任务id
*/
deleteTaskById(id: number){
// 1.删除的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('ID', id)
// 2.删除操作
return this.rdbStore.delete(predicates)
}
}
let taskModel = new TaskModel();
export default taskModel as TaskModel;
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
以上代码在EcoDev Studio中previewer校验报错。很多处都出现下划波浪线。知道是写法问题但是又不知道该怎么修改。
具体位置:
</markdown>更多关于HarmonyOS 鸿蒙5.0代码迁移问题:鸿蒙4.0没问题的代码,到鸿蒙5.0校验不通过。要怎么修改呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
// TaskInfo.ets
// 数据操作放在model目录下
import relationalStore from '@ohos.data.relationalStore';
import TaskInfo from '../viewmodel/TaskInfo';
class TaskModel {
private rdbStore: relationalStore.RdbStore | undefined
private tableName: string = ‘TASK’
/**
- 初始化任务表
*/
initTaskDB(context: Context) {
// 1.rdb配置
const config : relationalStore.StoreConfig = {
name: ‘MyApplication.db’,
securityLevel: relationalStore.SecurityLevel.S1
}
<span class="hljs-comment">// 2.初始化SQL语句</span>
<span class="hljs-keyword">const</span> sql = `CREATE TABLE IF NOT EXISTS TASK (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
NAME TEXT NOT NULL,
FINISHED bit
)`
<span class="hljs-comment">// 3.获取rdb</span>
relationalStore.getRdbStore(context, config, (err, rdbStore) => {
<span class="hljs-keyword">if</span>(err){
console.log(<span class="hljs-string">'testTag'</span>, <span class="hljs-string">'获取rdbStore失败!'</span>)
<span class="hljs-keyword">return</span>
}
<span class="hljs-comment">// 执行Sql</span>
rdbStore.executeSql(sql)
console.log(<span class="hljs-string">'testTag'</span>, <span class="hljs-string">'创建task表成功!'</span>)
<span class="hljs-comment">// 保存rdbStore</span>
<span class="hljs-keyword">this</span>.rdbStore = rdbStore
})
}
/**
- 查询任务列表
*/
async getTaskList(){
// 1.构建查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
// 2.查询
let result = await this.rdbStore?.query(predicates, [‘ID’, ‘NAME’, ‘FINISHED’])
// 3.解析查询结果
// 3.1.定义一个数组,组装最终的查询结果
let tasks: TaskInfo[] = []
// 3.2.遍历封装
if(result !== undefined){
while(!result.isAtLastRow){
// 3.3.指针移动到下一行
result.goToNextRow()
// 3.4.获取数据
let id = result.getLong(result.getColumnIndex(‘ID’))
let name = result.getString(result.getColumnIndex(‘NAME’))
let finished = result.getLong(result.getColumnIndex(‘FINISHED’))
// 3.5.封装到数组
tasks.push(new TaskInfo(id, name, !!finished))
}
}
console.log(<span class="hljs-string">'testTag'</span>, <span class="hljs-string">'查询到数据:'</span>, <span class="hljs-built_in">JSON</span>.stringify(tasks))
<span class="hljs-keyword">return</span> tasks
}
/**
- 添加一个新的任务
- @param name 任务名称
- @returns 任务id
*/
addTask(name: string): Promise<number> {
if (this.rdbStore) {
return this.rdbStore.insert(this.tableName, {name, finished: false})
} else {
return Promise.resolve(-1)
}
}
/**
updateTaskStatus(id: number, finished: boolean) {
// 1.要更新的数据
let data : relationalStore.ValuesBucket = {finished}
// 2.更新的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo(‘ID’, id)
// 3.更新操作
if (this.rdbStore) {
return this.rdbStore.update(data, predicates)
} else {
return Promise.resolve(-1)
}
}
/**
- 根据id删除任务
- @param id 任务id
*/
deleteTaskById(id: number) {
// 1.删除的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo(‘ID’, id)
// 2.删除操作
if (this.rdbStore) {
return this.rdbStore.delete(predicates)
} else {
return
}
}
}
let taskModel = new TaskModel();
export default taskModel as TaskModel;
@Entry
@Component
export struct Index {
build() {
}
}
// Index.ets
// 数据操作放在model目录下
import relationalStore from ‘@ohos.data.relationalStore’;
import TaskInfo from ‘…/viewmodel/TaskInfo’;
class TaskModel {
private rdbStore: relationalStore.RdbStore | undefined
private tableName: string = ‘TASK’
/**
- 初始化任务表
*/
initTaskDB(context: Context) {
// 1.rdb配置
const config : relationalStore.StoreConfig = {
name: ‘MyApplication.db’,
securityLevel: relationalStore.SecurityLevel.S1
}
<span class="hljs-comment">// 2.初始化SQL语句</span>
<span class="hljs-keyword">const</span> sql = `CREATE TABLE IF NOT EXISTS TASK (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
NAME TEXT NOT NULL,
FINISHED bit
)`
<span class="hljs-comment">// 3.获取rdb</span>
relationalStore.getRdbStore(context, config, (err, rdbStore) => {
<span class="hljs-keyword">if</span>(err){
console.log(<span class="hljs-string">'testTag'</span>, <span class="hljs-string">'获取rdbStore失败!'</span>)
<span class="hljs-keyword">return</span>
}
<span class="hljs-comment">// 执行Sql</span>
rdbStore.executeSql(sql)
console.log(<span class="hljs-string">'testTag'</span>, <span class="hljs-string">'创建task表成功!'</span>)
<span class="hljs-comment">// 保存rdbStore</span>
<span class="hljs-keyword">this</span>.rdbStore = rdbStore
})
}
/**
- 查询任务列表
*/
async getTaskList(){
// 1.构建查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
// 2.查询
let result = await this.rdbStore?.query(predicates, [‘ID’, ‘NAME’, ‘FINISHED’])
// 3.解析查询结果
// 3.1.定义一个数组,组装最终的查询结果
let tasks: TaskInfo[] = []
// 3.2.遍历封装
if(result !== undefined){
while(!result.isAtLastRow){
// 3.3.指针移动到下一行
result.goToNextRow()
// 3.4.获取数据
let id = result.getLong(result.getColumnIndex(‘ID’))
let name = result.getString(result.getColumnIndex(‘NAME’))
let finished = result.getLong(result.getColumnIndex(‘FINISHED’))
// 3.5.封装到数组
tasks.push(new TaskInfo(id, name, !!finished))
}
}
console.log(<span class="hljs-string">'testTag'</span>, <span class="hljs-string">'查询到数据:'</span>, <span class="hljs-built_in">JSON</span>.stringify(tasks))
<span class="hljs-keyword">return</span> tasks
}
/**
- 添加一个新的任务
- @param name 任务名称
- @returns 任务id
*/
addTask(name: string): Promise<number> {
if (this.rdbStore) {
return this.rdbStore.insert(this.tableName, {name, finished: false})
} else {
return Promise.resolve(-1)
}
}
/**
updateTaskStatus(id: number, finished: boolean) {
// 1.要更新的数据
let data : relationalStore.ValuesBucket = {finished}
// 2.更新的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo(‘ID’, id)
// 3.更新操作
if (this.rdbStore) {
return this.rdbStore.update(data, predicates)
} else {
return Promise.resolve(-1)
}
}
/**
- 根据id删除任务
- @param id 任务id
*/
deleteTaskById(id: number) {
// 1.删除的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo(‘ID’, id)
// 2.删除操作
if (this.rdbStore) {
return this.rdbStore.delete(predicates)
} else {
return
}
}
}
let taskModel = new TaskModel();
export default taskModel as TaskModel;
@Entry
@Component
export struct Index {
build() {
}
}
更多关于HarmonyOS 鸿蒙5.0代码迁移问题:鸿蒙4.0没问题的代码,到鸿蒙5.0校验不通过。要怎么修改呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
麻烦发下initTaskDB是什么函数,还有“../viewmodel/TaskInfo”中的内容。不然光用这个文件肯定是很多没法识别的函数
然后,initTaskDB在其他文件这样子使用: TaskModel.initTaskDB(this.context)
以上的TaskInfo类即为“…/viewmodel/TaskInfo”中的内容。
你好,请问怎么更新呢?
面对HarmonyOS鸿蒙5.0代码迁移问题,首先需确认是否由于API变更或安全策略升级导致原有代码校验不通过。鸿蒙5.0可能引入了新的系统接口和安全机制,要求开发者对代码进行相应调整。
具体修改步骤可包括:
-
查阅更新日志:详细阅读鸿蒙5.0的开发者文档和更新日志,了解API的废弃、新增以及安全策略的变更。
-
更新API调用:根据鸿蒙5.0的API规范,更新代码中所有不再支持的API调用,替换为新的等效API。
-
调整权限设置:如果问题涉及权限,检查并调整应用的权限请求,确保符合鸿蒙5.0的权限管理要求。
-
代码重构与安全优化:根据鸿蒙5.0的安全标准,对代码进行必要的重构和安全优化,以提升应用的稳定性和安全性。
-
重新编译与测试:完成上述修改后,重新编译代码,并在鸿蒙5.0环境下进行详尽测试,确保所有功能正常运行且通过校验。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html