当前位置: 首页 > news >正文

鸿蒙仓颉:如何获取全局定义的Context以及使用方法


在使用仓颉语言开发App的时候,使用全局的context,如果采用文档中的方案,定义在index.cj中的话,使用起来很局限化,如果在子主包和子包中都使用全局的context,如果主包的UI需要使用子包中的逻辑,主包和子包就会产生相互依赖的问题(combind), 编译就会报错。

如何解决这个问题呢?

**思路:**剥离全局的context,存储context到全局的单例中,那不管子包还是主包,引用全局的context的都不会产生相互依赖的问题,就可以正常使用全局的context了。

存储全局的context
package ohos_app_cangjie_entry.utils
import ohos.ark_interop_helper.StageContextvar globalAppStageContext: Option<StageContext> = Option<StageContext>.Nonepublic class WinAppUtil {public init(context:StageContext) {AppLogUtil.info('WinAppUtil init');globalAppStageContext = context;}public static  func getGlobalAppContext(){return globalAppStageContext;}
}

入口类main_ability.cj中初始化存储全局的context

public override func onWindowStageCreate(windowStage: WindowStage): Unit {AppLog.info("MainAbility onWindowStageCreate.")let appStageContext = getStageContext(globalAbilityContext.getOrThrow());DatabaseHelper(appStageContext);WinAppUtil(appStageContext);windowStage.loadContent("EntryView")
}

如何实际应用呢?
在使用系统的Preferences的时候,如果没有全局管理的文件,就会很麻烦,我们就可以整理成一个文件,在子包中整理。

Preferences实例与持久化文件一一对应,文件路径通过应用上下文(context)获取(路径格式:/data/app/el1/100/base/[包名])。数据加载到内存中的Preferences实例,直到主动移除或删除文件。

package ohos_app_cangjie_entry.utilsimport ohos.preferences.ValueType as PValueType
import ohos.preferences.Preferences
import ohos_app_cangjie_entry.constants.CommonTagConstantspublic class WinPreferencesManager {/*** 存储数据至沙盒中*/public static func putPreferencesInfo(key: String, value: PValueType) {let appContext = WinAppUtil.getGlobalAppContext().getOrThrow();var my_preference = Preferences.getPreferences(appContext, CommonTagConstants.PRE_TAG);my_preference.put(key, value)my_preference.flush();}/*** 获取沙盒存储数据的值*/public static func getPreferencesInfo(key: String) {let appContext = WinAppUtil.getGlobalAppContext().getOrThrow();var my_preference = Preferences.getPreferences(appContext, CommonTagConstants.PRE_TAG);if (my_preference.has(key)) {let value = my_preference.get(key, PValueType.string(''))match (value) {case PValueType.string(n) => return ncase _ => return ''}}return ''}
}

目录结构如下:
在这里插入图片描述

如果你的目录结构中,还有其他子包,怎么使用WinPreferencesManager都不会用相互引用的问题。

http://www.dtcms.com/a/486771.html

相关文章:

  • 银河麒麟V10的X86架构部署postgresql,解决信创离线部署兼容问题
  • 如何建设物流网站智慧团建官网手机版登录
  • 寄生虫网站代做工程公司取名字大全
  • 用户体验就是新SEO:如何同时提升搜索者满意度和搜索排名
  • SpringBoot的IOC和DI学习
  • 《道德经》第十七章
  • 长宁区网站制作设计wordpress添加微信分享功能
  • vue做pc网站某网站seo诊断分析和优化方案
  • AWS MSK IAM 认证访问权限配置指南
  • 郑州网站制作价格网站做线
  • Code2Video: 代码驱动生成教育视频
  • 【Qt】7.信号和槽_connect函数用法(1)
  • 【成功案例分享】手腕鼓包?不痛不痒?我的腱鞘囊肿15天自愈实战记录
  • gcc: 函数调用优化一例,在栈里找不到函数调用的影子;gdb
  • Navicat Premium 与金仓数据库融合实践:高效管理国产数据库新方案
  • 高光谱成像在种子品种、种子纯度、种子活力鉴别的研究进展
  • 怎样在网上建网站做电商生意网站抓取压力高
  • 陕西网站建设开发企业网站搜索优化外
  • 校园网站建设初探论文南山品牌网站建设企业
  • Apache Spark算法开发指导-特征转换TargetEncoder
  • spark热点key导致的数据倾斜复现和加盐处理
  • Chrominum的技术架构
  • 青岛网站域名备案查询佛山市企业网站建设哪家好
  • 目标检测:从定义到实战关键技术
  • 如何利用AOP实现业务层接口的执行效率
  • 废家电回收小程序:绿色生活与智慧服务的前端功能创新
  • Fast DDS简介
  • 做数据的网站有哪些内容乐陵seo公司
  • 大数据平台安全指南——大数据平台安全架构全景:从认证授权到数据治理的企业级实践指南——认证、授权、审计、加密四大支柱
  • 管理员网站上海有哪些做网站