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校验报错。很多处都出现下划波浪线。知道是写法问题但是又不知道该怎么修改。

具体位置:



更多关于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
        
      
                  
                  
                  

