OpenHarmony 与 ArkUI-X 跨平台开发 AtomGit Pocket 小完善

0. 项目概述与开发准备

0.0 先碎碎念吧

学习过程中应该学会激励自己,满足自己的成就感,认可度。

项目初创就是一个 hello world,

image

然后就是测试 API 能否使用,完全没有设计,只是功能测试

image

在一个界面内进行发送请求接收解析数据,确定没有功能性问题,

就可以开始构建自己的小想法了

推荐先把大体框架定下来,如何在逐渐丰富完善,最明显就是下面这张图

2025-12-16_003220

中间的界面是已经用令牌验证后的样子,惨不忍睹,完全看不出是自己的账号,两边是修改后的,

还有创建初期,可以先规划好样式,然后先使用模拟数据占位演示,然后再小修小补完善应用,从惨不忍睹到还能看,成就就会持续增长,可以维持激发学习热情,来图展示吧

2025-12-16_003506

2025-12-16_003315

2025-12-16_0034142025-12-16_003828

0.1 项目简介

本项目是一个基于 OpenHarmony 和 ArkUI-X 的跨平台应用,用于访问 GitCode API,展示项目列表、项目详情和用户信息等。通过本项目,您将学习如何使用 ArkTS 语言开发跨平台应用,如何设计分层架构,以及如何与第三方 API 进行交互。

0.2 开发环境搭建

0.3 项目结构设计

entry/src/main/ets/
├── components/          # 自定义组件
│   └── RefreshWrapper.ets
├── entryability/        # 应用入口
├── pages/               # 页面组件
│   ├── Home.ets
│   ├── ProjectDetail.ets
│   └── Repositories.ets
├── services/            # API服务
│   ├── ApiService.ets
│   └── GitCodeApiService.ets
└── utils/               # 工具类
    ├── AuthManager.ets
    ├── HttpClient.ets
    ├── PaginationHelper.ets
    └── Types.ets

1. 核心功能模块设计

1.1 API 服务层设计

API 服务层是应用与 GitCode API 交互的核心,采用了单例模式设计,主要包含以下几个部分:

1.1.1 ApiService - 服务入口

ApiService ​是应用的 API 服务入口,负责统一管理所有 API 请求,将 GitCode API 返回的数据转换为应用内部使用的数据类型。

// ApiService.ets
import GitCodeApiService from './GitCodeApiService';
import { Repository } from '../utils/Types';

export default class ApiService {
  private static instance: ApiService;
  private gitCodeApiService: GitCodeApiService;

  private constructor() {
    this.gitCodeApiService = GitCodeApiService.getInstance();
  }

  public static getInstance(): ApiService {
    if (!ApiService.instance) {
      ApiService.instance = new ApiService();
    }
    return ApiService.instance;
  }

  // 搜索项目
  public async searchProjects(query: string, pagination: PaginationHelper): Promise<Repository[]> {
    // 实现搜索项目的逻辑
  }

  // 获取项目详情
  public async getProjectDetail(fullName: string): Promise<GitCodeProjectDetail> {
    // 实现获取项目详情的逻辑
  }
}

1.1.2 GitCodeApiService - API 交互实现

GitCodeApiService ​负责具体的 API 请求实现,包括请求配置、认证处理和响应解析等。

// GitCodeApiService.ets
import HttpClient from '../utils/HttpClient';
import AuthManager from '../utils/AuthManager';

export default class GitCodeApiService {
  private static instance: GitCodeApiService;
  private httpClient: HttpClient;
  private baseUrl: string = 'https://api.gitcode.com';

  private constructor() {
    this.httpClient = HttpClient.getInstance();
    this.httpClient.setBaseURL(this.baseUrl);
  }

  public static getInstance(): GitCodeApiService {
    if (!GitCodeApiService.instance) {
      GitCodeApiService.instance = new GitCodeApiService();
    }
    return GitCodeApiService.instance;
  }

  // 发送HTTP请求
  private async request<T>(endpoint: string, params: Record<string, string | number> = {}): Promise<T> {
    // 实现HTTP请求逻辑
  }

  // 搜索项目
  public async searchProjects(query: string, page: number = 1, perPage: number = 20): Promise<GitCodeProject[]> {
    // 实现搜索项目的API调用
  }
}

1.2 工具类设计

1.2.1 HttpClient - HTTP 客户端

HttpClient ​是一个封装了网络请求的工具类,提供了 GET、POST 等方法,简化了网络请求的使用。

1.2.2 AuthManager - 认证管理

AuthManager ​负责管理用户的认证信息,包括令牌的存储和获取。

1.2.3 PaginationHelper - 分页助手

PaginationHelper ​用于管理分页参数,提供了获取分页参数、重置分页等方法。

2. 页面组件实现

2.1 首页实现 (Home.ets)

首页主要负责展示项目列表,支持下拉刷新和上拉加载更多功能。

// Home.ets
import { Repository } from '../utils/Types';
import { RefreshWrapper } from '../components/RefreshWrapper';
import ApiService from '../services/ApiService';
import PaginationHelper from '../utils/PaginationHelper';
import router from '@ohos.router';

@Entry
@Component
export struct Home {
  @State refreshing: boolean = false;
  @State hasMoreData: boolean = true;
  @State projectList: Repository[] = [];
  @State loading: boolean = false;
  @State errorMessage: string = '';
  private apiService: ApiService = ApiService.getInstance();
  private paginationHelper: PaginationHelper = new PaginationHelper(10);

  aboutToAppear(): void {
    this.loadData();
  }

  async loadData(): Promise<void> {
    // 实现加载数据的逻辑
  }

  onRefresh(): void {
    // 实现下拉刷新的逻辑
  }

  onLoadMore(): void {
    // 实现上拉加载更多的逻辑
  }

  handleItemClick(item: ListItem): void {
    // 实现项目点击跳转的逻辑
  }

  build() {
    // 实现UI布局
  }
}

2.2 项目详情页实现 (ProjectDetail.ets)

项目详情页用于展示项目的详细信息,包括项目名称、描述、统计信息等。

// ProjectDetail.ets
import { GitCodeProjectDetail } from '../utils/Types';
import ApiService from '../services/ApiService';
import router from '@ohos.router';

@Entry
@Component
export struct ProjectDetail {
  @State projectDetail: GitCodeProjectDetail | null = null;
  @State loading: boolean = true;
  @State errorMessage: string = '';
  private apiService: ApiService = ApiService.getInstance();
  private fullName: string = '';

  aboutToAppear(): void {
    // 从路由参数中获取项目fullName
    const params = router.getParams() as Record<string, Object>;
    this.fullName = (params['fullName'] as string) || 'git/git';
    this.loadProjectDetail();
  }

  async loadProjectDetail(): Promise<void> {
    // 实现加载项目详情的逻辑
  }

  build() {
    // 实现UI布局
  }
}

3. 路由系统设计

3.1 路由跳转方法

应用使用了 OpenHarmony 的 @ohos.router ​模块进行页面跳转,支持参数传递和返回等功能。

3.1.1 跳转到项目详情页

// Home.ets
router.pushUrl({
  url: `pages/ProjectDetail`,
  params: {
    fullName: fullName
  }
});

3.1.2 从项目详情页返回

// ProjectDetail.ets
router.back();

3.2 路由参数获取

在页面的 aboutToAppear ​生命周期方法中,可以通过 router.getParams() ​获取路由参数。

// ProjectDetail.ets
aboutToAppear(): void {
  const params = router.getParams() as Record<string, Object>;
  this.fullName = (params['fullName'] as string) || 'git/git';
}

4. 状态管理

4.1 组件状态管理

组件内部使用 @State ​装饰器管理状态,当状态发生变化时,组件会自动重新渲染。

// Home.ets
@State projectList: Repository[] = [];
@State loading: boolean = false;
@State errorMessage: string = '';

4.2 全局状态管理

对于需要在多个组件间共享的状态,可以使用单例模式实现全局状态管理,例如 AuthManager ​用于管理用户认证信息。

5. 错误处理

应用在各个层面都实现了错误处理机制,确保在出现错误时能够给用户友好的提示。

5.1 API 请求错误处理

在 API 服务层,对所有 API 请求进行了错误捕获和处理,将错误信息传递给调用者。

// ApiService.ets
public async getProjectDetail(fullName: string): Promise<GitCodeProjectDetail> {
  try {
    // 发送API请求
  } catch (error) {
    console.error('获取项目详情失败:', error);
    throw error instanceof Error ? error : new Error(String(error));
  }
}

5.2 页面错误处理

在页面组件中,对 API 请求返回的错误进行了处理,展示错误信息并提供重试功能。

// ProjectDetail.ets
async loadProjectDetail(): Promise<void> {
  this.loading = true;
  this.errorMessage = '';

  try {
    this.projectDetail = await this.apiService.getProjectDetail(this.fullName);
  } catch (error) {
    this.errorMessage = `加载项目详情失败: ${(error as Error).message || '请稍后重试'}`;
  } finally {
    this.loading = false;
  }
}

6. 性能优化

6.1 分页加载

应用实现了分页加载功能,每次只加载固定数量的数据,减少了一次性加载大量数据对性能的影响。

6.2 下拉刷新

下拉刷新功能允许用户手动刷新数据,确保数据的及时性。

6.3 上拉加载更多

上拉加载更多功能允许用户加载更多数据,提高了用户体验。

7. 总结

本项目是一个基于 OpenHarmony 和 ArkUI-X 的跨平台应用,实现了 GitCode 项目的搜索、详情查看等功能。通过本项目的学习,您可以掌握 OpenHarmony 应用开发的基本流程和核心技术,包括:

  1. 项目结构设计
  2. API 服务层实现
  3. 页面组件开发
  4. 路由系统设计
  5. 状态管理
  6. 错误处理

希望本教程能够帮助您快速入门 OpenHarmony 和 ArkUI-X 开发,开发出高质量的跨平台应用。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...