鸿蒙避坑之context值传递

前言

该问题是我在某站中的某马的鸿蒙课程中发现,折磨了我一会,希望做次文章为新手鸿蒙开发者避坑

视频链接如下

视频链接icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1Sa4y1Z7B1?p=31


正文

在这一集中老师在EntryAbility.ets文件的onCreate钩子函数中传递了this.context

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    taskModel.initTaskDB(this.context);
  }

initTaskDB(context){
  //内容
    }

但是在接受的时候就会报错:Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck>

但是老师那边是没有报错,这就让我百思不解,既然发现问题,那么就解决问题,既然你是要一个明确的类型那么我就给你

于是我点进context的源码,看到了类型是UIAbilityContext

那我就将这个类型放到

initTaskDB(context:UIAbilityContext){
  //   1.rdb配置
    ...
    }

  //   2.初始化SQL语句
    ....

  //   3.获取rdb
    relationalStore.getRdbStore(context,config,(err,rdbStore)=>{

    })
    }

 然后getrdbStore的第一个参数就可以报错了:Argument of type 'UIAbility' is not assignable to parameter of type 'BaseContext'. <ArkTSCheck>

解决方法一:

乍眼一看,哟 原来你是想要BaseContext的类型,好说好说

然后给context的类型改为BaseContext

import { Ability, common } from '@kit.AbilityKit';

class TaskModel{
  /**
   * 初始化任务表
   */
  initTaskDB(context:common.BaseContext){
  
    }

注意:BaseContext不能直接给,需要导包,然后使用包名.xxxxxx

解决方法二: 

点击getRdbStore的源码

relationalStore.getRdbStore(context,config,(err,rdbStore)=>{

就会发现其实给context给上Context也可以

initTaskDB(context:Context){
  //内容
    }

 不过Context的父类是BaseContext

结束

好了,问题解决,有兴趣的也可以去看一下官方关于context文档

官方文档icon-default.png?t=O83Ahttps://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-context-V5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值