首页 > 其他分享 >鸿蒙HarmonyOS 5.0快速开发APP:一步一步教你从入门到进阶

鸿蒙HarmonyOS 5.0快速开发APP:一步一步教你从入门到进阶

时间:2024-12-21 21:56:11浏览次数:6  
标签:5.0 java 一步 新闻 APP import news newsItems public

电信巨擘华为10月22日宣布推出“纯血”鸿蒙作业系统(操作系统) HarmonyOS 5.0,引发全球智能装备市场高度关注。这套系统强调完全自主研发,是首个国产行动作业系统。这套系统已成为全球第三大行动作业系统,仅次于苹果iOS系统和谷歌旗下的安卓(Android)。

华为宣布正式发布纯血鸿蒙作业系统之后,引发全球科技界关注。作为电子科技的领头羊,华为推出任何新产品及技术,拥有电子半导体业“独立自主”、摆脱依赖技术的背景。

在10月22日晚的发表会上,公司常务董事余承东强调此次推出鸿蒙5.0,代表华为实现了全面突破:“我们在操作系统的研发,用10年的时间干了欧美同行30多年才做成的事。”北京刊出评论员文章称,“‘纯血’鸿蒙更代表着企业在操作系统领域从‘跟跑’到‘领跑’的奋进,是打破‘缺芯少魂’困局的重要一步。”

上面都是吹水的哈,本文直接上手第一个鸿蒙项目,如何在开发工具DevEco Studio上run起来一个简单应用。
在这里插入图片描述
好的!下面是稍复杂一点的鸿蒙项目示例。这次我们将创建一个 新闻阅读应用,它包含以下功能:

  • 从网络获取新闻列表。
  • 显示新闻的标题和简短内容。
  • 点击某条新闻,进入新闻详情页面。

项目:新闻阅读应用

项目功能:
  1. 从网络获取新闻数据:使用简单的 API(模拟)从服务器获取新闻列表。
  2. 展示新闻列表:使用 ListContainer 显示新闻的标题和简要内容。
  3. 点击查看详情:点击新闻标题,进入详细页面,显示新闻的全文内容。

1. 项目结构

news-app
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com.example.newsapp
│   │   │       └── MainAbility.java        // 主入口代码
│   │   │       └── NewsDetailAbility.java  // 新闻详情页面
│   │   ├── resources
│   │   │   ├── base
│   │   │   │   └── layout
│   │   │   │       ├── main_layout.xml     // 新闻列表页面布局
│   │   │   │       └── news_detail.xml     // 新闻详情页面布局
│   │   ├── config.json                     // 配置文件
│   ├── resources.json                     // 资源文件信息

2. 布局文件:main_layout.xml

路径:news-app/src/main/resources/base/layout/main_layout.xml

这是新闻列表页面的布局,包含:

  • 一个 ListContainer,用于显示新闻的标题和简要内容。
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical"
    ohos:padding="10vp">

    <!-- 新闻列表 -->
    <ListContainer
        ohos:id="$+id:news_list"
        ohos:width="match_parent"
        ohos:height="match_parent"/>
</DirectionalLayout>

3. 新闻详情页面布局:news_detail.xml

路径:news-app/src/main/resources/base/layout/news_detail.xml

显示新闻的详细内容,包含:

  • 一个 Text 用于显示新闻标题。
  • 一个 Text 用于显示新闻的详细内容。
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical"
    ohos:padding="20vp">

    <!-- 新闻标题 -->
    <Text
        ohos:id="$+id:news_title"
        ohos:width="match_parent"
        ohos:height="wrap_content"
        ohos:text_size="25fp"
        ohos:text_color="#000000"
        ohos:margin_bottom="10vp"/>

    <!-- 新闻内容 -->
    <Text
        ohos:id="$+id:news_content"
        ohos:width="match_parent"
        ohos:height="wrap_content"
        ohos:text_size="18fp"
        ohos:text_color="#000000"/>
</DirectionalLayout>

4. 主页面代码:MainAbility.java

路径:news-app/src/main/java/com/example/newsapp/MainAbility.java

MainAbility.java 中,我们会模拟从网络获取新闻数据,并将数据展示在新闻列表中。当用户点击某条新闻时,跳转到新闻详情页面。

package com.example.newsapp;

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.ListContainer;
import ohos.agp.components.Text;
import ohos.agp.components.BaseItemProvider;
import ohos.agp.components.Component;
import ohos.agp.components.Button;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

import java.util.ArrayList;
import java.util.List;

public class MainAbility extends Ability {
    private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_CORE, 0xD001100, "MainAbility");

    private ListContainer newsList;
    private NewsAdapter newsAdapter;
    private List<NewsItem> newsItems;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_main_layout);

        newsList = (ListContainer) findComponentById(ResourceTable.Id_news_list);

        // 模拟获取网络数据
        newsItems = new ArrayList<>();
        newsItems.add(new NewsItem("新闻1", "这是新闻1的简短内容"));
        newsItems.add(new NewsItem("新闻2", "这是新闻2的简短内容"));
        newsItems.add(new NewsItem("新闻3", "这是新闻3的简短内容"));
        newsItems.add(new NewsItem("新闻4", "这是新闻4的简短内容"));

        // 设置适配器
        newsAdapter = new NewsAdapter(newsItems);
        newsList.setItemProvider(newsAdapter);

        // 点击新闻事件
        newsList.setItemClickedListener((container, component, position, id) -> {
            NewsItem clickedNews = newsItems.get(position);
            Intent intent1 = new Intent();
            intent1.setElement(new Intent.ElementName(getBundleName(), NewsDetailAbility.class.getName()));
            intent1.setParam("newsTitle", clickedNews.getTitle());
            intent1.setParam("newsContent", clickedNews.getContent());
            present(NewsDetailAbility.class, intent1);
        });
    }

    // 新闻项数据类
    public static class NewsItem {
        private String title;
        private String content;

        public NewsItem(String title, String content) {
            this.title = title;
            this.content = content;
        }

        public String getTitle() {
            return title;
        }

        public String getContent() {
            return content;
        }
    }

    // 新闻适配器
    public class NewsAdapter extends BaseItemProvider {
        private List<NewsItem> newsItems;

        public NewsAdapter(List<NewsItem> newsItems) {
            this.newsItems = newsItems;
        }

        @Override
        public int getCount() {
            return newsItems.size();
        }

        @Override
        public Object getItem(int position) {
            return newsItems.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public Component getComponent(int position, Component convertView, Component parent) {
            if (convertView == null) {
                convertView = getLayoutInflater().inflate(ResourceTable.Layout_news_item, null);
            }

            NewsItem newsItem = newsItems.get(position);
            Text titleText = (Text) convertView.findComponentById(ResourceTable.Id_news_title);
            titleText.setText(newsItem.getTitle());
            Text contentText = (Text) convertView.findComponentById(ResourceTable.Id_news_content);
            contentText.setText(newsItem.getContent());

            return convertView;
        }
    }
}

5. 新闻详情页面代码:NewsDetailAbility.java

路径:news-app/src/main/java/com/example/newsapp/NewsDetailAbility.java

NewsDetailAbility.java 中,我们会接收新闻标题和内容,并显示在新闻详情页面。

package com.example.newsapp;

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Text;

public class NewsDetailAbility extends Ability {
    private Text newsTitle;
    private Text newsContent;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_news_detail);

        newsTitle = (Text) findComponentById(ResourceTable.Id_news_title);
        newsContent = (Text) findComponentById(ResourceTable.Id_news_content);

        // 从Intent获取数据
        String title = intent.getStringParam("newsTitle");
        String content = intent.getStringParam("newsContent");

        newsTitle.setText(title);
        newsContent.setText(content);
    }
}

6. 配置文件:config.json

路径:news-app/src/main/config.json

配置文件用于定义应用的基本信息和启动项。

{
  "app": {
    "bundleName": "com.example.newsapp",
    "vendor": "example",
    "version": {
      "code": 1,
      "name": "1.0"
    }
  },
  "module": {
    "abilities": [
      {
        "name": ".MainAbility",
        "label": "$string:app_name",
        "icon": "$media:icon",
        "type": "page",
        "orientation": "unspecified",
        "launchType": "singleton"
      },
      {
        "name": ".NewsDetailAbility",
        "label": "News Detail",
        "icon": "$media:icon",
        "type": "page"
      }
    ]
  }
}

总结

这个新闻应用项目演示了如何使用鸿蒙系统来构建一个

数据驱动的应用。它涵盖了以下技术:

  • 网络数据获取:通过模拟数据方式,演示了如何处理新闻数据。
  • UI布局和组件:通过 ListContainerText 显示新闻列表和详情。
  • 页面间数据传递:通过 Intent 传递新闻标题和内容到详情页面。
  • 适配器模式:使用自定义适配器来渲染新闻列表。

这个示例项目帮助你理解如何在鸿蒙环境下构建多页面应用,如何处理数据、UI和页面跳转。如果你需要实现真正的网络请求,可以使用鸿蒙的网络库(如 HttpURLConnection)来替代模拟数据。

标签:5.0,java,一步,新闻,APP,import,news,newsItems,public
From: https://blog.csdn.net/bryant_liu24/article/details/144632926

相关文章

  • 鸿蒙元服务从0到上架【第一篇】(最后一步容易中招)
    最后一招没做好,上架审核极可能被驳回!何为元服务元服务(原名为原子化服务)是华为HarmonyOS提供的一种面向未来的服务提供方式,是有独立入口、免安装、可为用户提供一个或多个服务的新型应用程序形态。元服务基于HarmonyOSAPI开发,支持运行在1+8+N设备上,供用户在合适的场景......
  • 基于Uniapp + SpringBoot + Vue的热岛志愿者服务小程序
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 基于Uniapp + SpringBoot + Vue的民宿预订小程序小程序
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 传输层安全协议TLS 超全解析!(含record、handshake握手全流程、Alert、ApplicationData)
    TLS协议概述SSL即安全套接字层,它位于OSI网络模型中的传输层,SSL在1999年更名为TLS,即传输安全层,直到现在,TLS一共出现过三个版本,1.1、1.2和1.3,目前最广泛使用的是1.2,所以接下来的探讨都是基于TLS1.2的版本上的。设计目标保密性通过加密算法保护数据内容,......
  • ssm毕设图书馆app程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着移动网络的快速发展以及大屏智能手机的广泛普及,人们的信息获取方式发生了巨大转变,应用程序(APP)成为日常生活不可或缺的元素[1] 。图书馆作为......
  • java ssm基于Android流动人口管理系统uniapp出租屋户籍迁移(源码+文档+运行视频+讲解视
     文章目录系列文章目录前言一、开发介绍二、详细视频演示三、项目部分实现截图四、uniapp介绍五、系统测试六、代码参考源码获取目的摘要:基于JavaSSM和Android的流动人口管理系统为城市管理提供了有效的工具。该系统借助UniApp实现多平台访问,涵盖了出租屋管......
  • java ssm基于Android旅游信息查询系统uniapp旅游景点(源码+文档+运行视频+讲解视频)
     文章目录系列文章目录前言一、开发介绍二、详细视频演示三、项目部分实现截图四、uniapp介绍五、系统测试六、代码参考源码获取目的摘要:基于JavaSSM和Android的旅游信息查询系统为游客提供了便捷的旅游信息查询服务。该系统通过UniApp实现多平台应用,涵盖了......
  • 一对一视频直播app开发,可优化性能的JavaScript技巧
    一对一视频直播app开发,10个高级的JavaScript技巧1、解构赋值解构赋值是一种从数组或对象中提取值并将其分配给变量的简洁方法,可以简化代码并提高可读性。对于数组,您可以使用方括号表示,而对于对象,则可以使用大括号表示。//解构数组const[firstItem,secondItem,...re......
  • python3:访问apple server api
     一,安装用到的库:(venv)liuhongdi@lhdpc:/data/work/python/xiaoqu$pip3installPyJWTCollectingPyJWTDownloadingPyJWT-2.10.1-py3-none-any.whl.metadata(4.0kB)DownloadingPyJWT-2.10.1-py3-none-any.whl(22kB)Installingcollectedpackages:PyJWTSucces......
  • Thinkphp+uniapp智慧小区物业管理小程序
    基于Thinkphp+uniapp开发的智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。功能简介:房产管理......