HarmonyOS 鸿蒙5.0代码迁移问题:鸿蒙4.0没问题的代码,到鸿蒙5.0校验不通过。要怎么修改呢?

发布于 1周前 作者 h691938207 来自 鸿蒙OS

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

8 回复

// 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) =&gt; {
  <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) } }

/**

  • 根据id更新任务状态
  • @param id 任务id
  • @param finished 任务是否完成 */

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) =&gt; {
  <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) } }

/**

  • 根据id更新任务状态
  • @param id 任务id
  • @param finished 任务是否完成 */

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”中的内容。不然光用这个文件肯定是很多没法识别的函数

// 数据模型

@Observed // @Observed用于嵌套类场景中,观察对象类属性变化 export default class TaskInfo{ id: number // 待办名称 name: string // 待办状态:是否完成 finished: boolean

constructor(id: number, name: string) { // 构造函数 this.id = id this.name = name this.finished = false } }

然后,initTaskDB在其他文件这样子使用: TaskModel.initTaskDB(this.context)

以上的TaskInfo类即为“…/viewmodel/TaskInfo”中的内容。

更新数据类型即可,你这些大多数是数据类型的原因

你好,请问怎么更新呢?

面对HarmonyOS鸿蒙5.0代码迁移问题,首先需确认是否由于API变更或安全策略升级导致原有代码校验不通过。鸿蒙5.0可能引入了新的系统接口和安全机制,要求开发者对代码进行相应调整。

具体修改步骤可包括:

  1. 查阅更新日志:详细阅读鸿蒙5.0的开发者文档和更新日志,了解API的废弃、新增以及安全策略的变更。

  2. 更新API调用:根据鸿蒙5.0的API规范,更新代码中所有不再支持的API调用,替换为新的等效API。

  3. 调整权限设置:如果问题涉及权限,检查并调整应用的权限请求,确保符合鸿蒙5.0的权限管理要求。

  4. 代码重构与安全优化:根据鸿蒙5.0的安全标准,对代码进行必要的重构和安全优化,以提升应用的稳定性和安全性。

  5. 重新编译与测试:完成上述修改后,重新编译代码,并在鸿蒙5.0环境下进行详尽测试,确保所有功能正常运行且通过校验。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部