HarmonyOS NEXT 体验调用云数据库更新排行榜单

news2024/11/17 21:28:56

一、介绍
基于鸿蒙Next模拟一个排行帮单
二、场景需求
1.目标用户
社交平台用户,尤其是热衷于获取和分享信息的年轻人和用户群体。

2. 功能描述
用户可以通过“排行帮单”功能查看某个主题或领域的热门内容,并能够向朋友或群体推荐特定的项目。

3. 需求功能模块
主题选择:用户可以选择不同的主题(如“电影”、“音乐”、“书籍”等)。
排行榜展示:
显示每个主题下的排行榜(如TOP 10电影、TOP 5推荐书籍)。

4. 互动设计
点赞和评论:用户可以对排行榜中的项目进行点赞或评论。
投票机制:用户可以参与投票,影响排行榜的排名。
5. 潜在价值
提升用户的参与感和互动性。
增强社交平台的内容活跃度,提高用户留存率。
帮助用户快速获取他人推荐的热门内容,减少选择困难。

三、业务步骤
第一步:在页面初始化的时候获取云数据库数据
第二部:将获取的数据展示到页面
四、效果展示
 

#HarmonyOS NEXT 体验官#调用云数据库更新排行榜单-鸿蒙开发者社区


五:代码展示:

import { promptAction, router } from '@kit.ArkUI';
import cloud from '@hw-agconnect/cloud';
import { PointsList } from '../PointsList';
import schema from '../idiom-schema.json';
import { Logger } from '@hw-agconnect/hmcore';
import { TAG } from '@ohos/hypium/src/main/Constant';

import { CommonConstants, FooterTabType } from '../common/CommonConstants';
import { HomePage } from '../pages/HomePage'
import { IdiomPage } from '../pages/IdiomPage'
import { PointsListPage } from '../pages/PointsListPage'
import { MinePage } from '../pages/MinePage'

AppStorage.setOrCreate('isLogin', true)
AppStorage.setOrCreate('Phone', 'admin')
AppStorage.setOrCreate('Password', '123456')


@Entry
@Component
struct Index {
  @State currentIndex: number = 0;
  @State fontColor: string = '#182431'
  @State selectedFontColor: string = '#007DFF'
  private controller: TabsController = new TabsController()
  @Provide pointsList: PointsList[] = [] //排上榜单数据

  @Builder
  tabBuilder(tabList: FooterTabType[], index: number) {
    Column() {
      Image(this.currentIndex === index ? tabList[index].icon_select : tabList[index].icon_normal)
        .width(28)
        .height(28)
        .objectFit(ImageFit.Contain)
      Text(tabList[index].title)
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
        .fontSize(12)
        .fontWeight(500)
        .lineHeight(20)
    }.width('100%')
  }

  //获取榜单数据
  async pointsListQuery() {
    try {
      let resultData:PointsList[] = await cloud.database({ objectTypeInfo: schema, zoneName: "idiomData" })
        .collection(PointsList).query().get();
      this.pointsList = resultData.sort((a,b)=> b.UserPoints - a.UserPoints)

      Logger.info(TAG, "query success : " + JSON.stringify(this.pointsList));
    } catch (err) {
      Logger.error(TAG, "query err------------" + JSON.stringify(err));
    }
  }

  onPageShow(): void {
    if (router.getParams() as number != null && router.getParams() as number != undefined) {
      this.currentIndex = router.getParams() as number
    } else {
      this.currentIndex = 0
    }
    this.isSilentLogin() // 是否登录
    this.pointsListQuery() //获取榜单数据
  }

  isSilentLogin() {
    cloud.auth().getCurrentUser().then(user => {
      if (user) {
        //业务逻辑
        AppStorage.set('isLogin', false)
        return
      }
      AppStorage.set('isLogin', true)
    });
  }

  build() {
    Stack() {
      Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
        TabContent() {
          Column() {
            HomePage()
          }.height('100%')
          .width('100%')
          .backgroundColor(0xeeeeee)
        }.tabBar(this.tabBuilder(CommonConstants.FOOTER_TAB_TITLE, 0))

        TabContent() {
          Column() {
            IdiomPage()
          }.height('100%')
          .width('100%')
          .backgroundColor(0xeeeeee)
        }.tabBar(this.tabBuilder(CommonConstants.FOOTER_TAB_TITLE, 1))

        TabContent() {
          Column() {
            PointsListPage()
          }.height('100%')
          .width('100%')
          .backgroundColor(0xeeeeee)
        }.tabBar(this.tabBuilder(CommonConstants.FOOTER_TAB_TITLE, 2))

        TabContent() {
          Column() {
            MinePage()
          }.height('100%')
          .width('100%')
          .backgroundColor(0xeeeeee)

        }.tabBar(this.tabBuilder(CommonConstants.FOOTER_TAB_TITLE, 3))

      }
      .scrollable(false)
      .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
      .height("100%")
      .width("100%")
      .onChange((idx: number) => {
        this.currentIndex = idx
      })

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

PointsListPage .ets

import { PointsList } from '../PointsList'

@Component
export struct PointsListPage {
  @Consume pointsList:PointsList[]
  build() {
    Column(){
      Scroll(){
        Column(){
          Row(){
            Text('用户').fontSize(18).fontWeight(600)
            Text('分数').fontSize(18).fontWeight(600)
            Text('排名').fontSize(18).fontWeight(600)
          }.width('90%')
          .height(50)
          .justifyContent(FlexAlign.SpaceAround)
          ForEach(this.pointsList,(item:PointsList,idx:number)=>{
            Row(){
              Text(item.UserName).fontSize(16)
              Text(""+item.UserPoints).fontSize(16)
              Text(idx.toString()).fontSize(16)
            }.width('90%')
            .height(30)
            .justifyContent(FlexAlign.SpaceAround)
          },(item:string)=>item)
        }
        .backgroundColor(0xFFFFFF)
        .borderRadius(8)
        .width("90%")
        .height("94%")
      }

    }.width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
    .backgroundImage($r('app.media.idiomBackground'))
    .backgroundImageSize(ImageSize.Cover)
  }
}



六、代码结构及原理:

这两端段代码展示了如何使用ArkTS和ArkUI框架创建一个交互式的ui页面。它利用了声明式UI、响应式编程和组件化的概念,创建自定组件,更加便捷的组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2104107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据治理与标准推动数据成为“金矿”

方案介绍: 数据治理是一个涉及组织、政策、流程和技术的综合性框架,旨在确保数据的质量、安全性、可用性、合规性和一致性。它涵盖了从数据产生到销毁的全生命周期管理,确保数据在组织内部得到正确、高效地使用。而数据标准是数据治理的基石…

OPenCV结构分析与形状描述符(2)计算轮廓周长的函数arcLength()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算轮廓的周长或曲线的长度。 该函数计算曲线的长度或闭合轮廓的周长。 如果曲线是闭合的(即首尾相连),则计…

CSS解析:层叠、优先级和继承

CSS虽说不是编程语言,但是日常使用中经常有很多误解,发现样式不奏效的情况,所以需要加强下CSS基础。 CSS本质上就是声明规则,即在各种条件下,我们希望产生特定的效果。 如果某个元素有这个类,则应用这些样…

英文翻译哪家强?2024年3款热门工具大比拼

现在世界变得越来越“小”,英语几乎成了大家都懂的语言。但对那些天天忙工作的小伙伴们来说,一大堆英文的东西,比如文件、邮件、会议记录,看着就头大。好在,科技帮了大忙,出了好多翻译工具。2024年&#xf…

php邮箱服务器怎么搭建?如何构建服务器?

php邮箱服务器配置教程指南?php邮件服务器如何搭建? 搭建一个稳定高效的php邮箱服务器,不仅可以提升邮件传输的效率,还能增强数据的安全性。那么,如何着手搭建这样一个服务器呢?AokSend将详细探讨php邮箱服…

使用YOLOv10训练自定义数据集之一(环境部署)

0x00 前言 由清华大学的研究团队基于 Ultralytics Python 包研发的 YOLOv10,通过优化模型结构并去除非极大值抑制(NMS)环节,提出了一种创新的实时目标检测技术。这些改进不仅实现了行业领先的检测性能,还降低了对计算…

网络编程----网络基础ip地址

一丶IP地址 1.基本概念 1. IP地址是Internet中主机的标识 2. Internet中的主机要与别的机器通信必须具有一个IP地址 3. IP地址为32位(IPv4)或者128位(IPv6) NAT:公网转私网、私网转公网 4. IPV4表示形式&…

【简历】25届上海某一本JAVA简历:第一次看学校背景写一页的

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份25 届上海某一本大学硕士的Java简历。这份简历写得比较偏,让人头疼。 这位同学的学校是重点一本,可以冲…

C++第四十五弹---深入理解包装器:提升代码复用性与安全性的利器

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1 包装器 1.1、function包装器 1.2、bind 1 包装器 1.1、function包装器 function包装器 也叫作适配器。C中的function本质是一个类模板&…

uniapp树洞烦恼分享系统 微信小程序设计与实现 80igt

目录 博主介绍技术栈系统设计🌟文末获取源码数据库🌟具体实现截图后端前端java类核心代码部分展示可行性论证个人心得系统测试操作可行性源码获取详细视频演示 博主介绍 👇🏻 博主介绍:👇🏻 专…

使用 WARP 和 Perf 测试对 MinIO 企业对象存储进行基准测试

AI/ML、高级分析和数据库等现代应用程序需要高性能对象存储。MinIO Enterprise Object Store 将可扩展性和高性能相结合,使每个工作负载(无论要求多么苛刻)触手可及。我们发布的基准测试表明,MinIO Enterprise Object Storage 是市…

泰克Tektronix MSO46 一款混合信号示波器

Tektronix MSO46 是一款混合信号示波器 (MSO),专为调试和分析复杂的电子电路而设计。FlexChannel 技术使每个通道输入都可以用作单个模拟通道、八个数字逻辑输入(使用 TLP058 逻辑探头)或同时使用模拟和频谱视图,每个域都有独立的…

前端进阶|一文理解柯里化的逆操作,什么是反柯里化

温故而知新 在说反柯里化之前,先来复习下柯里化的基础。之前文章,我们了解了什么是柯里化,以及柯里化的实现原理,同时我们也明白了什么情况下我们使用柯里化,详细阅读参见之前文章《前端进阶|由浅入深的理…

探索Python世界的趣味之旅:自制贪吃蛇游戏

通过本次贪吃蛇游戏的开发实践,不仅可以掌握Python编程语言的基础知识,还深入了解了游戏开发的基本流程和技术要点。这只是一个开始,Python的世界远不止于此。未来,你可以尝试开发更复杂、更有趣的游戏项目,甚至探索人…

Java详解String 字符串类以及String内存原理、StringBuilder类、StringJoiner类(附有代码+案例)

文章目录 九.String 字符串类型9.0 String概述9.1 字符串常用方法9.2 String内存图9.2.1直接赋值9.2.2new出来 9.3字符串比较9.4 字符串遍历9.4.1 统计字符串大小写及数字9.4.2 拼接字符串9.4.3字符串反转 9.5 StringBuilder类9.5.1StringBuilder 构造方法9.5.2StringBuilder常…

Spring全局异常处理HandlerExceptionResolver使用

1 引言 全局异常处理在项目中经常会用到,主要作用包括统一处理异常、提供友好的错误信息、避免应用程序崩溃、记录异常日志、避免异常信息泄露等等。下文将以实现HandlerExceptionResolver接口的方式,实现全局异常处理功能及常规用法。 2 代码 下面列…

Qt 字符串的编码方式,以及反斜杠加3个数字是什么编码\344\275\240,如何生成

Qt 字符串的编码方式 问题 总所周知,Qt的ui文件在编译时,会自动生成一个ui_xxxxx.h的头文件,打开一看,其实就是将摆放的控件new出来以及布局的代码。 只要用Qt提供的uic.exe工具,自己也可以将ui文件输出为代码文件…

day17JS-Cookle、webStorage和Promise

1. 什么是Cookle 在网页中需要向当前电脑中存储一些数据,通过cookie可以存储。 Cookie :是一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件,用于识别用户身份、跟踪用户活动、保存用户设置等。它通常包括名称、值、域名、…

云服务器+docker:还在为项目上线苦恼?一文包你解决(保姆级教程,图文并茂,万字起步!!!)

目录 Blue留言机: 学习视频以及参考资料 : 1、学习之前的必备操作: 第一步:购买服务器 选择一台免费的云服务器(包白嫖的) 配置服务器的一点说明: 查看自己是否购买成功: 第…

解决UOS开发截图时电脑滴滴声

在使用import命令截图时,电脑会伴随滴滴声,影响程序使用体验,使用 sudo rmmod pscpkr 即可解决滴滴声,这个命令每次开机,重新运行程序时都需输入,因此需要在脚本文件中自动执行,但是sudo命令需…