安卓老baby逆袭,华为鸿蒙开发让我赚到了第一桶金

起因事情是这样的,我发表上一篇文章我通过了华为鸿蒙的开发者高级认证真的可以遥遥领先后,居然有同学找我给他做个鸿蒙的留言板demo,他说就是DataAbility的增删改查的.

DataAbility是什么?考试也没考这玩意啊??

作为一个被高级认证的开发者怎么能不会?于是我搜索的一圈居然被我找到demo,代码都有

这岂不是含泪血赚,这样让我想到了

还有这个

于是我假装很难为情并且很复杂的样子,报价300!!!

然后经过一番讨价还价最终成交180,真的是大砍刀

于是我去官方demo clone了一份,一切都很顺利, 当clone一份之后我不出意外的话就出意外了,居然是用java写的,作为一个华为的高级开发者必须要拥抱ArkTS

各位女菩萨先来看看我实现的样子

接下来就是纯干货,请各位女菩萨做好准备 首先分析下这个需求是一个留言板的DataAbility的demo,可以确定一下几个知识点

  1. DataAbility(数据的增删改查)
  2. 留言板展示(List组件,State监听数据列表的变化,@ObjectLink+@Observed 监听每个item数据变化)

说干就干,由于DataAbility是Fa类型的项目所以我们先创建一个Fa项目,然后我们定义MessageBoard数据对象

js 复制代码
@Observed
export class MessageBoard {
  mId: string;
  name: string;
  content: string;
  dateTime: string;

  constructor(name: string = "", content: string = "", dateTime: string = "",mId: string = '',) {
    this.name = name;
    this.content = content;
    this.dateTime = dateTime
    this.mId = mId
  }
}

然后定义Item组件

js 复制代码
import { CustomDialogExample } from './CustomDialog';
import { MessageBoard } from './MessageBoard';

@Preview
@Component
export struct MessageCard {
  action: (o: MessageBoard) => void
  @ObjectLink
  mItem: MessageBoard;
  //弹框组件
  dialogController = new CustomDialogController({
    builder: CustomDialogExample({
      action: this.update.bind(this),
      // @ts-ignore
      message: this.mItem,
      update: true
    }),
    autoCancel: true,
    customStyle: false,
  })

  build() {
    Column() {
      Text(this.mItem.name)
        .fontSize('30px')
        .fontColor('#463100')

      Text(this.mItem.content)
        .margin({ top: '20px', bottom: '20px' })
        .fontSize('40px')
        .fontColor('#463100')

      Text(this.mItem.dateTime)
        .width('100%')
        .fontSize('25px')
        .textAlign(TextAlign.End)
        .fontColor('#999')

    }
    .onClick(() => {

      this.dialogController.open()

    })
    .padding('20px')
    .margin('20px')
    .alignItems(HorizontalAlign.Start)
    .border({ width: '1px', style: BorderStyle.Solid, color: '#936800', radius: '10px', })
    .backgroundColor('#fbeace')
    .shadow({ radius: 5, color: '#eee', offsetX: 10, offsetY: 10 })
  }

  update(item: MessageBoard) {
    this.mItem.content = item.content
    this.mItem.name = item.name
    this.mItem.dateTime = item.dateTime
    this.action(item)
  }
}

下面将他们放在List组件里面,这里还加了侧滑删除

js 复制代码
build() {
  Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {
    List() {
      ForEach(this.messageBoards, (item: MessageBoard, index) => {
        ListItem() {
          MessageCard({ action: this.clickSave.bind(this), mItem: item })
        }.swipeAction({ end: this.itemEnd(item, index) })//侧滑删除

      }, (item: MessageBoard) => item.mId)
    }
    .width('100%')
    .padding({ top: '40px', right: '40px', left: '40px' })
    .flexGrow(1)

    Button('+', { type: ButtonType.Circle, stateEffect: true })
      .borderRadius('72px')
      .backgroundColor(0x317aff)
      .margin('20px')
      .fontSize('120px')
      .onClick(() => {
        this.dialogController.open()
      })

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

好了我们下面我们讲下dataAbility,直接创建 file->new->Ability->DataAbility,然后将官网DataAbility的代码copy进来改改(dataAbility可以理解为android中的数据共享,可以供其他应用访问,还有就是数据库的功能)

js 复制代码
import hilog from '@ohos.hilog';
import featureAbility from '@ohos.ability.featureAbility'
import dataAbility from '@ohos.data.dataAbility'
import dataRdb from '@ohos.data.rdb'

const TABLE_NAME = 'message'//表名
const STORE_CONFIG = { name: 'message.db' }//数据库名
//建表语句
const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS message(id INTEGER PRIMARY KEY AUTOINCREMENT,mId TEXT NOT NULL, name TEXT NOT NULL, content TEXT NOT NULL,dateTime TEXT NOT NULL)'
let rdbStore: dataRdb.RdbStore = undefined

export default {
    onInitialized(abilityInfo) {
        hilog.info(0x0000, 'testTag', '%{public}s', 'DataAbility onInitialized');
        console.info('DataAbility onInitialized, abilityInfo:' + abilityInfo.bundleName)
        let context = featureAbility.getContext()
        dataRdb.getRdbStore(context, STORE_CONFIG, 1, (err, store) => {
            console.info('DataAbility getRdbStore callback')
            store.executeSql(SQL_CREATE_TABLE, [])
            rdbStore = store
        });
    },
    insert(uri, valueBucket, callback) {
        console.info('DataAbility insert start')
        rdbStore.insert(TABLE_NAME, valueBucket, callback)
    },
    batchInsert(uri, valueBuckets, callback) {
        console.info('DataAbility batch insert start')
        for (let i = 0;i < valueBuckets.length; i++) {
            console.info('DataAbility batch insert i=' + i)
            if (i < valueBuckets.length - 1) {
                rdbStore.insert(TABLE_NAME, valueBuckets[i], (err: any, num: number) => {
                    console.info('DataAbility batch insert ret=' + num)
                })
            } else {
                rdbStore.insert(TABLE_NAME, valueBuckets[i], callback)
            }
        }
    },
    query(uri, columns, predicates, callback) {
        console.info('DataAbility query start')
        let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
        rdbStore.query(rdbPredicates, columns, callback)
    },
    update(uri, valueBucket, predicates, callback) {
        console.info('DataAbilityupdate start')
        let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
        rdbStore.update(valueBucket, rdbPredicates, callback)
    },
    delete(uri, predicates, callback) {
        console.info('DataAbilitydelete start')
        let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
        rdbStore.delete(rdbPredicates, callback)
    }
};

主要注意以下几点

  1. 使用的时候路径是三个斜杠
js 复制代码
urivar = "dataability:///com.cornflower.myapplication.DataAbility"
DAHelper = featureAbility.acquireDataAbilityHelper(this.urivar)
  1. 对数据操作时候的predicates,这个可以自定义查询条件如下
js 复制代码
var pre = new ohos_data_ability.DataAbilityPredicates().equalTo("mId", o.mId)
this.DAHelper.update(this.urivar, va, pre, (error, res) => {
  hilog.debug(0x0001, 'DAHelper', '%{public}s', res);
})

最后说下韩国电影有句台词:"钱就是熨斗,可以熨平生活的一切褶皱"

相关推荐
工程师老罗1 小时前
如何在Android工程中配置NDK版本
android
崔庆才丨静觅1 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60612 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了2 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅2 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅3 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅3 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment3 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅4 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊4 小时前
jwt介绍
前端