app开发技术分享HarmonyOS 鸿蒙Next 兑换商品数据插入

app开发技术分享HarmonyOS 鸿蒙Next 兑换商品数据插入

技术栈

Appgallery connect

开发准备

上一节我们实现了积分列表的展示,我们可以更直观的查看当前用户积分的收支情况,但是现在我们只有积分收入并没有消费的地方,所以现在我们开始着手积分兑换相关的内容。这一节我们来实现积分兑换商品的内容

功能分析

首先我们需要创建对应的积分商品表、实体类、db类,现在我们的表是空的,在进行数据展示之前我们先要添加数据,我们创建一个空页面,在生命周期方法中先添加数据,方便我们等会儿使用

代码实现

首先创建对应的表

{
  "objectTypeName": "points_product",
  "fields": [
    {"fieldName": "id", "fieldType": "Integer", "notNull": true, "belongPrimaryKey": true},
    {"fieldName": "url", "fieldType": "String"},
    {"fieldName": "name", "fieldType": "Text"},
    {"fieldName": "points", "fieldType": "Double"},
    {"fieldName": "amount", "fieldType": "Integer"},
    {"fieldName": "text_message", "fieldType": "String"},
    {"fieldName": "parameter", "fieldType": "String"},
    {"fieldName": "delivery_time", "fieldType": "String"},
    {"fieldName": "sales_volume", "fieldType": "Integer"},
    {"fieldName": "spec_str", "fieldType": "String"},
    {"fieldName": "max_loop_amount", "fieldType": "Integer"}
  ],
  "indexes": [
    {"indexName": "field1Index", "indexList": [{"fieldName":"id","sortType":"ASC"}]}
  ],
  "permissions": [
    {"role": "World", "rights": ["Read"]},
    {"role": "Authenticated", "rights": ["Read", "Upsert"]},
    {"role": "Creator", "rights": ["Read", "Upsert", "Delete"]},
    {"role": "Administrator", "rights": ["Read", "Upsert", "Delete"]}
  ]
}

实体类的创建

class PointsProduct {
  id: number;
  url: string;
  name: string;
  points: number;
  amount: number;
  text_message: string;
  parameter: string;
  delivery_time: string;
  sales_volume: number;
  spec_str: string;
  max_loop_amount: number;

  constructor() {}

  setId(id: number): void {
    this.id = id;
  }

  getId(): number {
    return this.id;
  }

  setUrl(url: string): void {
    this.url = url;
  }

  getUrl(): string {
    return this.url;
  }

  setName(name: string): void {
    this.name = name;
  }

  getName(): string {
    return this.name;
  }

  setPoints(points: number): void {
    this.points = points;
  }

  getPoints(): number {
    return this.points;
  }

  setAmount(amount: number): void {
    this.amount = amount;
  }

  getAmount(): number {
    return this.amount;
  }

  setText_message(text_message: string): void {
    this.text_message = text_message;
  }

  getText_message(): string {
    return this.text_message;
  }

  setParameter(parameter: string): void {
    this.parameter = parameter;
  }

  getParameter(): string {
    return this.parameter;
  }

  setDelivery_time(delivery_time: string): void {
    this.delivery_time = delivery_time;
  }

  getDelivery_time(): string {
    return this.delivery_time;
  }

  setSales_volume(sales_volume: number): void {
    this.sales_volume = sales_volume;
  }

  getSales_volume(): number {
    return this.sales_volume;
  }

  setSpec_str(spec_str: string): void {
    this.spec_str = spec_str;
  }

  getSpec_str(): string {
    return this.spec_str;
  }

  setMax_loop_amount(max_loop_amount: number): void {
    this.max_loop_amount = max_loop_amount;
  }

  getMax_loop_amount(): number {
    return this.max_loop_amount;
  }
}

export { PointsProduct };

db类

import { cloudDatabase } from '@kit.CloudFoundationKit';

class points_product extends cloudDatabase.DatabaseObject {
  public id: number;
  public url: string;
  public name: string;
  public points: number;
  public amount: number;
  public text_message: string;
  public parameter: string;
  public delivery_time: string;
  public sales_volume: number;
  public spec_str: string;
  public max_loop_amount: number;

  public naturalbase_ClassName(): string {
    return 'points_product';
  }
}

export { points_product };

都创建完成之后我们新建一个页面,在页面加载时新增数据

import { points_product } from '../../clouddb/points_product'
import { cloudDatabase } from '@kit.CloudFoundationKit';
import showToast from '../../utils/ToastUtils';

@Entry
@Component
struct PointsProductPage {
  async aboutToAppear(): Promise<void> {
    let databaseZone = cloudDatabase.zone('default');
    let product = new points_product()
    product.id = Math.floor(Math.random() * 1000000)
    product.url = "在线图片链接"
    product.name = "拉布布"
    product.points = 300000
    product.amount = 1
    product.text_message = "典藏版拉布布"
    product.parameter = "常温存放"
    product.delivery_time = "兑换后立马发货"
    product.sales_volume = 9999
    product.spec_str = "典藏款"
    product.max_loop_amount = 1
    let points_nums = await databaseZone.upsert(product);
    if (points_nums > 0) {
      showToast("添加成功")
    }
  }

  build() {
    RelativeContainer() {

    }
    .height('100%')
    .width('100%')
  }
}

我们新建的页面,通过积分兑换按钮进入

case "积分兑换":
  router.pushUrl({url:'pages/points/PointsProductPage'})
  break;

到这里我们就实现了数据的插入


更多关于app开发技术分享HarmonyOS 鸿蒙Next 兑换商品数据插入的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

鸿蒙Next兑换商品数据插入可使用分布式数据对象或关系型数据库实现。分布式数据对象适合跨设备同步场景,通过create和set方法创建并修改数据对象。关系型数据库采用RDB存储,使用insert接口插入商品兑换记录,需提前构建Predicates条件。数据管理模块提供完整的事务支持,确保数据一致性。两种方式都需在config.json中声明数据权限。分布式方案需设备组网,RDB方案仅限本地存储。具体选择取决于业务场景需求。

更多关于app开发技术分享HarmonyOS 鸿蒙Next 兑换商品数据插入的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中实现积分商品数据插入的方案很清晰。以下是对代码的几点补充说明:

  1. 表结构设计合理,包含了商品基本信息、积分价格、库存等关键字段。建议可以考虑添加create_time字段记录创建时间,便于后续数据分析。

  2. 实体类使用了TypeScript的getter/setter模式,这种封装方式有利于数据校验和业务逻辑处理。

  3. 数据库操作部分使用了CloudFoundationKit的zone和upsert方法,这是HarmonyOS云数据库的标准操作方式。upsert方法会自动判断是插入还是更新。

  4. 随机生成id的方式(Math.random)在开发测试阶段可行,但生产环境建议改用更可靠的ID生成策略,如时间戳+随机数组合。

  5. 页面跳转使用了router.pushUrl,这是HarmonyOS推荐的路由方式,保持了页面栈管理的一致性。

整体实现符合HarmonyOS Next的开发规范,数据层和UI层分离清晰,是一个标准的云数据库操作示例。

回到顶部