前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >鸿蒙-元服务-坚果派-第五章 接口解析示例

鸿蒙-元服务-坚果派-第五章 接口解析示例

作者头像
红目香薰
发布2025-02-21 08:49:20
发布2025-02-21 08:49:20
6700
代码可运行
举报
文章被收录于专栏:CSDNToQQCodeCSDNToQQCode
运行总次数:0
代码可运行

作者简介:大数据领域优质创作者、CSDN博客专家 、阿里云博客专家、华为云课堂认证讲师、华为云社区云享专家、坚果派社区成员、具有10余年横向开发经验,全国教师技能大赛获奖教师,现从事于大学计算机领域教育工作。 主要内容:人工智能与大数据、Java、Python、C#、PHP、ASP.NET、ArkTS、FAQ、简历模板、学习资料、面试题库、就业指导等。 初心目标:持续输出,为技术人创造更多的价值。

1、网络图片加载

代码语言:javascript
代码运行次数:0
复制
Image('https://file.atomgit.com/uploads/user/default.png').width('100%').height('30%')

2、安装axios库

加载位置

命令

ohpm install @ohos/axios

这个ohpm不需要单独安装,是鸿蒙安装包自带的,别跟npm与pnpm相比较。

加载完毕后引入axios

import axios, { AxiosResponse } from '@ohos/axios';

安装axios库可能的问题

明明已经安装完毕了,就是加载不出来,这里是由于当时计算机的内存可能快沾满了,没有正常异步加载成功。

手动加载库

步骤1、Build -> Clean Project
步驟2、File -> Sync and Refresh Project

4、对http的请求概述

应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。

HTTP数据请求功能主要由http模块提供。

使用该功能需要申请ohos.permission.INTERNET权限。

配置设置

配置文件:

entry\src\main\module.json5

增加配置(json中分隔前后要单独加一个英文逗号,):

代码语言:javascript
代码运行次数:0
复制
,
"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  }
]

增加位置(放在最后即可,但是看好整个对象属于【module】,不是单独存在的key):

我们这里使用的是axios来进行访问,主要通过其get与post进行访问。

5、model模型创建

我们想访问接口,那么肯定能看到接口返回的数据是有对应数据格式的,例如:

http://39.107.126.100:5000/getInfo

那么,我们就要根据它返回的数据进行解析。我们先看看具体的json格式。

仿照返回值创建数据集的单一对象。

创建model文件夹
创建model.ets文件

有几层就要创建几层model的ets文件,我们在其中看到address又是一个对象,所以得单独创建一个AddRess.ets的文件。

代码语言:javascript
代码运行次数:0
复制
export interface AddRess {
  city:string;
  country:string;
  street:string;
}
代码语言:javascript
代码运行次数:0
复制
import { AddRess } from "./AddRess";

export interface Users {
  address:AddRess;
  age:number;
  email:string;
  id:number;
  name:string;
  phone_numbers:string;
}

6、GET请求示例

引包操作
代码语言:javascript
代码运行次数:0
复制
import axios, { AxiosResponse } from '@ohos/axios';
import { ApiResult } from '../model/ApiResult';
import { Users } from '../model/Users';
import { BusinessError } from '@kit.BasicServicesKit';
返回数据
代码语言:javascript
代码运行次数:0
复制
@State info: Users[] | null = null;
GET请求函数
代码语言:javascript
代码运行次数:0
复制
/**
 * 异步加载get请求
 */
async queryUsers() {
  try {
    const url = "http://39.107.126.100:5000/getInfo";
    // 返回数据类型
    const result: AxiosResponse<Users[]> =
      await axios.get<ApiResult<Users[]>, AxiosResponse<Users[]>, null>(url);
    this.info=result.data;
  } catch (error) {
    const err = error as BusinessError;
  }
}
遍历展示数据
代码语言:javascript
代码运行次数:0
复制
import axios, { AxiosResponse } from '@ohos/axios';
import { ApiResult } from '../model/ApiResult';
import { Users } from '../model/Users';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct ShowUsers {
  @State info: Users[] | null = null;

  build() {
    Column() {
      Column() {
        Text() {
          Span("用 户 信 息")
        }.fontSize(36)
        .width('100%')
        .margin({ top: '15%', left: '50%' })
      }
      Text().borderStyle(BorderStyle.Solid).borderWidth(1).width('100%')
      List() {
        ForEach(this.info, (u: Users, index) => {
          ListItem() {
            Column() {
              Row() {
                Text("编号:").fontSize(22)
                Text(u.id.toString()).fontSize(22)
              }.width('100%')
              Row() {
                Text("姓名:").fontSize(22)
                Text(u.name.toString()).fontSize(22)
              }.width('100%')
              Row() {
                Text("年龄:").fontSize(22)
                Text(u.age.toString()).fontSize(22)
              }.width('100%')
              Row() {
                Text("手机号:").fontSize(22)
                Text(u.phone_numbers.toString()).fontSize(22)
              }.width('100%')
              Row() {
                Text("邮箱:").fontSize(22)
                Text(u.email.toString()).fontSize(22)
              }.width('100%')
              Row() {
                Text("地址:").fontSize(22)
                Text(){
                  Span(u.address.city.toString())
                  Span(u.address.country.toString())
                  Span(u.address.street.toString())
                }.fontSize(22)
              }.width('100%')
              Text().borderStyle(BorderStyle.Solid).borderWidth(1).width('100%')
            }.width('100%')
            .justifyContent(FlexAlign.Start)

          }
        })
      }
      .listDirection(Axis.Vertical)
    }
  }

  aboutToAppear(): void {
    this.queryUsers()
  }

  /**
   * 异步加载get请求
   */
  async queryUsers() {
    try {
      const url = "http://39.107.126.100:5000/getInfo";
      // 返回数据类型
      const result: AxiosResponse<Users[]> =
        await axios.get<ApiResult<Users[]>, AxiosResponse<Users[]>, null>(url);
      this.info = result.data;
    } catch (error) {
      const err = error as BusinessError;
    }
  }
}

效果图:

7、POST请求示例

POST接口连接:https://openatom.atomgit.com/api/developer/recommend_list

引包操作

模型层

ApiResult

代码语言:javascript
代码运行次数:0
复制
export interface ApiResult<T> {
  code: number;
  msg: string;
  data: T;
}

Community

代码语言:javascript
代码运行次数:0
复制
export interface Community {
  barId:number;
  barName:string;
  barNameEn:string|null;
  jumpUrl:string;
  communityId:number;
  sort:number;
  flag:number;
  createName:string;
  createTime:string;
  updateName:string|null;
  updateTime:string
}
引包操作
代码语言:javascript
代码运行次数:0
复制
import axios, { AxiosResponse } from '@ohos/axios';
import { BusinessError } from '@kit.BasicServicesKit';
import { Developer } from '../model/Developer';
import { Recommend } from '../model/Recommend';
返回数据
代码语言:javascript
代码运行次数:0
复制
@State info: Developer | null = null;
遍历展示数据
代码语言:javascript
代码运行次数:0
复制
import axios, { AxiosResponse } from '@ohos/axios';
import { BusinessError } from '@kit.BasicServicesKit';
import { Developer } from '../model/Developer';
import { Recommend } from '../model/Recommend';

PersistentStorage.persistProp<string>("token", "");

@Entry
@Component
struct ShowIndex {
  scroller: Scroller = new Scroller();
  @State url: string = "https://openatom.atomgit.com/api/developer/recommend_list";
  @State info: Developer | null = null;

  build() {
    Scroll(this.scroller) {
      Column(){
        ForEach(this.info?.records,(rec:Recommend,index)=>{
          Column(){
            Text(rec.nickname)
            Image(rec.photo).width(50)
            Text(rec.userId)
            Text(rec.username)
            Text(rec.jump)
          }
        })
      }.width('100%')
    }
  }
  aboutToAppear(): void {
    this.getOrgList();
  }
  async getOrgList() {
    interface RequestParam {
      pageSize: number;
      pageNum: number;
      isSelected: number;
    }
    const param: RequestParam = {
      pageSize: 10,
      pageNum: 1,
      isSelected: 0
    };
    axios.post(this.url, param, {
      headers: {
        "X-ATOMGIT-POP-COMMUNITY": "openatom"
      }
    }).then((ret: AxiosResponse) => {
      this.info=ret.data["data"];
      console.log(`请求结果:${JSON.stringify(ret.data["data"])}`);
    }).catch((error: BusinessError) => {
      console.error(`请求异常:${JSON.stringify(error)}`);
    })
  }
}

总字符:7,651选中:0光标:1行数:356行:1列:1

文件大小:8.85KB视图:100%

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、网络图片加载
  • 2、安装axios库
    • 安装axios库可能的问题
      • 步骤1、Build -> Clean Project
      • 步驟2、File -> Sync and Refresh Project
  • 4、对http的请求概述
    • 配置设置
  • 5、model模型创建
    • 创建model文件夹
    • 创建model.ets文件
  • 6、GET请求示例
    • 引包操作
    • 返回数据
    • GET请求函数
    • 遍历展示数据
  • 7、POST请求示例
    • 模型层
    • 引包操作
    • 返回数据
    • 遍历展示数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档