HarmonyOS鸿蒙Next中arkui-x跨平台到Android无法使用AppStorageV2

HarmonyOS鸿蒙Next中arkui-x跨平台到Android无法使用AppStorageV2 cke_313.png

以下代码构建到Android平台,在Android Studio上显示如上图,怎么解决

// 数据中心
// Sample.ets
@ObservedV2
export class Sample {
  @Trace p1: number = 0;
  p2: number = 10;
}
// Page1.ets
import { AppStorageV2 } from '@kit.ArkUI';
import { Sample } from '../Sample';
import { Page2 } from './index2';

@Entry
@ComponentV2
struct Page1 {
  // 在AppStorageV2中创建一个key为Sample的键值对(如果存在,则返回AppStorageV2中的数据),并且和prop关联
  @Local prop: Sample = AppStorageV2.connect(Sample, () => new Sample())!;
  pageStack: NavPathStack = new NavPathStack();

  @Builder
  PagesMap(name:string){
    if(name==='Page2'){
      Page2()
    }
  }
  build() {
    Navigation(this.pageStack) {
      Column() {
        Button('Go to page2')
          .onClick(() => {
            this.pageStack.pushPathByName('Page2', null);
          })

        Button('Page1 connect the key Sample')
          .onClick(() => {
            // 在AppStorageV2中创建一个key为Sample的键值对(如果存在,则返回AppStorageV2中的数据),并且和prop关联
            this.prop = AppStorageV2.connect(Sample, 'Sample', () => new Sample())!;
          })

        Button('Page1 remove the key Sample')
          .onClick(() => {
            // 从AppStorageV2中删除后,prop将不会再与key为Sample的值关联
            AppStorageV2.remove(Sample);
          })

        Text(`Page1 add 1 to prop.p1: ${this.prop.p1}`)
          .fontSize(30)
          .onClick(() => {
            this.prop.p1++;
          })

        Text(`Page1 add 1 to prop.p2: ${this.prop.p2}`)
          .fontSize(30)
          .onClick(() => {
            // 页面不刷新,但是p2的值改变了
            this.prop.p2++;
          })

        // 获取当前AppStorageV2里面的所有key
        Text(`all keys in AppStorage: ${AppStorageV2.keys()}`)
          .fontSize(30)
      }
    }.navDestination(this.PagesMap)
  }
}
// Page2.ets
import { AppStorageV2 } from '@kit.ArkUI';
import { Sample } from '../Sample';


@ComponentV2
export struct Page2 {
  // 在AppStorageV2中创建一个key为Sample的键值对(如果存在,则返回AppStorageV2中的数据),并且和prop关联
  @Local prop: Sample = AppStorageV2.connect(Sample, () => new Sample())!;
  pathStack: NavPathStack = new NavPathStack();

  build() {
    NavDestination() {
      Column() {
        Button('Page2 connect the key Sample1')
          .onClick(() => {
            // 在AppStorageV2中创建一个key为Sample1的键值对(如果存在,则返回AppStorageV2中的数据),并且和prop关联
            this.prop = AppStorageV2.connect(Sample, 'Sample1', () => new Sample())!;
          })

        Text(`Page2 add 1 to prop.p1: ${this.prop.p1}`)
          .fontSize(30)
          .onClick(() => {
            this.prop.p1++;
          })

        Text(`Page2 add 1 to prop.p2: ${this.prop.p2}`)
          .fontSize(30)
          .onClick(() => {
            // 页面不刷新,但是p2的值改变了;只有重新初始化才会改变
            this.prop.p2++;
          })

        // 获取当前AppStorageV2里面的所有key
        Text(`all keys in AppStorage: ${AppStorageV2.keys()}`)
          .fontSize(30)
      }
    }
    .onReady((context: NavDestinationContext) => {
      this.pathStack = context.pathStack;
    })
  }
}

更多关于HarmonyOS鸿蒙Next中arkui-x跨平台到Android无法使用AppStorageV2的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

AppStorageV2是HarmonyOS独有的应用级状态管理API,主要用于HarmonyOS单框架应用场景。当使用ArkUI-X跨平台到Android时,该API未实现Android平台适配,导致无法正常使用

解决方案

使用跨平台兼容的状态管理方案

// 使用@Local和@Param装饰器

@ObservedV2

export class Sample {

@Trace p1: number = 0;

p2: number = 10;

}

@Entry

@ComponentV2

struct Page1 {

@Local private sample: Sample = new Sample();

build() {

Column() {

Button('Go to page2')

.onClick(() => {

NavDestinationStack.push(Page2, { sample: this.sample })

})

Text(Page1 add 1 to p1: ${this.sample.p1})

.onClick(() => {

this.sample.p1++

})

}

}

}

更多关于HarmonyOS鸿蒙Next中arkui-x跨平台到Android无法使用AppStorageV2的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这不像你下班下班,

HarmonyOS Next中arkui-x跨平台到Android时,AppStorageV2不可用是因为该API为鸿蒙原生特性,依赖HarmonyOS底层框架。Android平台缺乏对应的运行时环境与系统级支持,导致无法兼容。arkui-x的跨平台适配目前未包含AppStorageV2的Android实现,需使用其他跨平台数据管理方案替代。

在Android平台上,AppStorageV2目前不支持跨平台使用。这是因为AppStorageV2依赖于HarmonyOS的运行时环境,而Android平台缺乏相应的底层实现。建议在跨平台开发中改用其他数据存储方案,如SharedPreferences或Room数据库,以确保在Android上的兼容性。

回到顶部