【Harmony】SCU暑期实训鸿蒙开发学习日记Day2

news2024/9/20 14:48:52

目录

Git

参考文章

常用操作

ArkTS的网络编程 

Http编程

发送请求

GET

POST

处理响应

JSON数据解析

处理响应头

错误处理

Web组件

用生命周期钩子实现登录验证功能

思路

代码示例

解读


纯记录学习日记,杂乱,误点的师傅可以×掉了😋

学下Git相关💑,以Gitee为例

最后补充了点ArkTS网络编程相关知识(没新东西)🤬

Git

参考文章

Gitee上传代码保姆级教程(亲测有效)

超级详细的GitBash使用教程

 使用Gitee多人项目协作开发的流程实例

Git 使用 —Git基本指令的使用

常用操作

本地pull远程文件夹

git clone https://gitee.com/z3r4y/ctf.git

查看远程和本地分支映射关系

git branch -a

切换分支模式到develop

 

添加并命名远程仓库 

git remote add origin https://gitee.com/z3r4y/ctf.git

添加一个远程仓库,并将其命名为 origin。这个远程仓库的URL是 https://gitee.com/z3r4y/ctf.git,表示在Gitee平台上的一个仓库。 

 develop开发完成后push代码到develop的分支

1.推送前注明本次推送目的

git add . (.代表目录下所有文件)

git commit -m '本次提交的说明'(说明信息为必填项,最好是信息有意义,便于后期理解)

2.本地仓库推送至指定的远程仓库中

git push -u origin develop

 

ArkTS的网络编程 

所有语言的网络编程都差不多,ArkTS也没新东西

Http编程

发送请求

GET
import http from '@ohos.net.http';

// 创建一个 HTTP 请求对象
let httpRequest = http.createHttp();

// 发送 GET 请求
httpRequest.request({
    method: 'GET',
    url: 'https://jsonplaceholder.typicode.com/todos/1',
    header: {
        'Content-Type': 'application/json'
    }
}, (err, data) => {
    if (!err) {
        // 处理响应数据
        console.log('Response: ' + data.result);
    } else {
        // 处理错误
        console.error('Request failed: ' + err.message);
    }
});
POST
import http from '@ohos.net.http';

// 创建一个 HTTP 请求对象
let httpRequest = http.createHttp();

// 发送 POST 请求
httpRequest.request({
    method: 'POST',
    url: 'https://jsonplaceholder.typicode.com/posts',
    header: {
        'Content-Type': 'application/json'
    },
    data: JSON.stringify({
        title: 'foo',
        body: 'bar',
        userId: 1
    })
}, (err, data) => {
    if (!err) {
        // 处理响应数据
        console.log('Response: ' + data.result);
    } else {
        // 处理错误
        console.error('Request failed: ' + err.message);
    }
});

处理响应

JSON数据解析

大多数HTTP API返回的数据都是JSON格式的。解析JSON数据是处理响应的常见操作。

httpRequest.request({
    method: 'GET',
    url: 'https://jsonplaceholder.typicode.com/todos/1',
    header: {
        'Content-Type': 'application/json'
    }
}, (err, data) => {
    if (!err) {
        try {
            let jsonResponse = JSON.parse(data.result);
            console.log('Title: ' + jsonResponse.title);
        } catch (e) {
            console.error('Failed to parse JSON response: ' + e.message);
        }
    } else {
        console.error('Request failed: ' + err.message);
    }
});
处理响应头

有时候,需要检查和处理响应头中的信息。例如,获取内容类型或认证信息。

httpRequest.request({
    method: 'GET',
    url: 'https://example.com/api/data',
    header: {
        'Accept': 'application/json'
    }
}, (err, data) => {
    if (!err) {
        console.log('Content-Type: ' + data.header['Content-Type']);
        let jsonResponse = JSON.parse(data.result);
        console.log('Data: ', jsonResponse);
    } else {
        console.error('Request failed: ' + err.message);
    }
});
错误处理

在处理HTTP请求时,错误处理是一个关键部分。通过检查错误对象的属性,开发者可以确定错误的类型并采取相应的措施。

基本错误处理

示例

httpRequest.request({
    method: 'GET',
    url: 'https://jsonplaceholder.typicode.com/invalid-endpoint',
    header: {
        'Content-Type': 'application/json'
    }
}, (err, data) => {
    if (!err) {
        console.log('Response: ' + data.result);
    } else {
        console.error('Request failed: ' + err.message);
    }
});

根据HTTP状态码处理错误

根据不同的HTTP状态码,执行不同的错误处理逻辑。

示例

httpRequest.request({
    method: 'GET',
    url: 'https://jsonplaceholder.typicode.com/todos/1',
    header: {
        'Content-Type': 'application/json'
    }
}, (err, data) => {
    if (!err) {
        console.log('Response: ' + data.result);
    } else {
        switch (err.status) {
            case 404:
                console.error('Error 404: Resource not found');
                break;
            case 500:
                console.error('Error 500: Internal server error');
                break;
            default:
                console.error('Request failed with status: ' + err.status);
        }
    }
});

Web组件

直接看这个👇

WebAPI官方文档

用生命周期钩子实现登录验证功能

在ArkUI中,可以利用生命周期方法来实现一个登录身份状态验证的组件。通过在组件的初始化阶段检查用户的身份状态,并根据状态在UI上显示不同的内容或进行相应的跳转操作。

思路

  1. 初始化:在组件初始化时(onInit 方法),检查用户的身份状态。
  2. 身份验证:根据身份状态决定显示登录页面还是主页面。
  3. 资源清理:在组件销毁时(onDestroy 方法),清理资源。

代码示例

@Entry
@Component
struct LoginStatusComponent {
  @State isLoggedIn: boolean = false;

  onInit() {
    this.checkLoginStatus();
  }

  onDestroy() {
    this.cleanup();
  }

  checkLoginStatus() {
    // 假设有一个函数 isUserLoggedIn() 返回用户的登录状态
    this.isLoggedIn = isUserLoggedIn();

    if (!this.isLoggedIn) {
      this.redirectToLogin();
    }
  }

  redirectToLogin() {
    // 跳转到登录页面的逻辑
    router.push({
      url: 'pages/LoginPage'
    });
  }

  cleanup() {
    console.log('Cleaning up resources...');
    // 清理资源的逻辑
  }

  build() {
    if (this.isLoggedIn) {
      return this.buildMainPage();
    } else {
      return this.buildLoginPage();
    }
  }

  buildMainPage() {
    return Column() {
      Text("Welcome, User!").fontSize(30)
      Button("Logout").onClick(() => {
        this.logout();
      })
    }
  }

  buildLoginPage() {
    return Column() {
      Text("Please log in.").fontSize(30)
      Button("Log In").onClick(() => {
        this.login();
      })
    }
  }

  login() {
    // 模拟登录操作
    this.isLoggedIn = true;
    // 更新登录状态后重新检查
    this.checkLoginStatus();
  }

  logout() {
    // 模拟注销操作
    this.isLoggedIn = false;
    // 更新登录状态后重新检查
    this.checkLoginStatus();
  }
}

// 假设是一个检查用户登录状态的函数
function isUserLoggedIn(): boolean {
  // 模拟一个登录检查
  return false; // 默认用户未登录
}

解读

  • onInit:在组件初始化时调用 checkLoginStatus 方法,检查用户的登录状态。
  • checkLoginStatus:使用 isUserLoggedIn 函数检查用户是否已登录。如果未登录,则调用 redirectToLogin 方法跳转到登录页面。
  • redirectToLogin:使用 router.push 方法跳转到登录页面。
  • onDestroy:在组件销毁时调用 cleanup 方法,清理资源。
  • build:根据用户的登录状态,决定显示主页面还是登录页面。
  • buildMainPagebuildLoginPage:分别构建主页面和登录页面的UI。
  • loginlogout:模拟登录和注销操作,并更新登录状态。

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

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

相关文章

体验智慧校园学工管理的社团类型功能

在智慧校园学工管理的框架下,社团类型的精细化管理成为了激发学生兴趣、促进社团多样性与规范性的关键。这一功能的核心在于构建一个清晰的社团分类体系,确保每一种社团都能在其所属领域内蓬勃发展,同时,也便于校园管理者进行有效…

C#与C++交互开发系列(一):引言:为什么需要C#与C++交互开发

C#与C交互开发系列(一):引言:为什么需要C#与C交互开发 欢迎来到C#与C交互开发系列博客的第一篇。在这个系列中,我们将探讨如何在C#与C之间实现互操作性,并逐步深入理解其应用场景和技术实现。本文将介绍什么…

植物大战僵尸全新版本Q版少女助阵好感度系统加持安卓winmac全兼容

植物大战僵尸全新版本Q版少女助阵好感度系统加持安卓winmac全兼容 链接: https://pan.baidu.com/s/11UFm4r8FKhkGAxM8dLVA8Q?pwdqnx8 提取码: qnx8

C++ ───List的使用

目录 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&…

算法——双指针(day2)

目录 202.快乐数 题目解析: 算法解析: 代码: 11.盛最多水的容器 题目解析: 算法解析: 代码: 202.快乐数 力扣链接:202.快乐数 题目解析: 本文中最重要的一句话就是重复平方和…

Elasticsearch基础(三)

目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.3.精准查询 1.4.地理坐标查询 1.5.复合查询 2.搜索结果处理 2.1.排序 2.2.分页 2.3.高亮 2.4.总结 3.RestClient查询文档 3.1.快速入门 3.2.match查询 3.3.精确查询 3.4.布尔查询 3.5.排序、分页 3.6.…

C语言 | Leetcode C语言题解之第233题数字1的个数

题目: 题解: int countDigitOne(int n) {// mulk 表示 10^k// 在下面的代码中,可以发现 k 并没有被直接使用到(都是使用 10^k)// 但为了让代码看起来更加直观,这里保留了 klong long mulk 1;int ans 0;f…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据,导致JSON数据大小过大,带宽大小不足,导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小,从而提高传输效率 服务器端压缩 springboot项目配置application文件,通过…

零基础学习Python(三)

1. 多重继承 一个子类可以继承多个父类,这与一些编程语言的规则不通。 如果多个父类中有同名的变量和方法,子类访问的顺序是按照继承时小括号里书写的顺序进行访问的。 可以用issubclass(B, A)方法判断B是否为A的子类。 2. 绑定 类中的方法通过参数s…

【代码随想录笔记】数组

目录 1、二分查找 2、移除元素 3、有序数组的平方 4、螺旋矩阵II 1、二分查找 对于二分搜索法&#xff0c;有两个边界问题是容易把握不准的 1. 是left < right还是left < right 2. 当nums[middle] > target时&#xff0c;需要更新右边界&#xff0c;那是right …

【深度学习入门篇 ⑥】PyTorch搭建卷积神经网络

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

‍我想我大抵是疯了,我喜欢上了写单元测试

前言 大家好我是聪。相信有不少的小伙伴喜欢写代码&#xff0c;但是对于单元测试这些反而觉得多此一举&#xff0c;想着我都在接口文档测过了&#xff01;还要写什么单元测试&#xff01;写不了一点&#xff01;&#xff01; 由于本人也是一个小小程序猿&#x1f649;&#xf…

Unity | Shader基础知识(第十八集:Stencil应用-透视立方盒子)

目录 一、前言 二、场景布置 三、 shader部分 1.图片的部分 2.图片部分纯净代码 3.遮罩部分复习 4.深度写入 ZWrite 5.颜色遮罩ColorMask 6.遮罩纯净代码 四、场景中shader使用 五、作者的碎碎念 一、前言 因为这个内容稍微有点多&#xff0c;我尽力讲清楚了&#x…

VAE论文阅读

在网上看到的VAE解释&#xff0c;发现有两种版本&#xff1a; 按照原来论文中的公式纯数学推导&#xff0c;一般都是了解生成问题的人写的&#xff0c;对小白很不友好。按照实操版本的&#xff0c;非常简单易懂&#xff0c;比如苏神的。但是却忽略了论文中的公式推导&#xff…

jquery中pdf在页面的显示和导出

jquery中pdf在页面的显示和导出 01 显示pdf01 .pdf结尾在线接口显示到页面 &#xff08;pdf.js库怎么安装及使用&#xff09;&#xff1a;只显示一页02 如何用PDF.JS显示整个PDF (而不仅仅是一页)&#xff1f;03 jQuery实现在线预览PDF文件(通过a标签链接跳转)&#xff1a; 02 …

【网络安全】PostMessage:分析JS实现XSS

未经许可&#xff0c;不得转载。 文章目录 前言示例正文 前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口&#xff08;例如&#xff0c;来自同一域名下的不同页面或者不同域名下的跨域页面&#xff09;进行通信&#xff0c;而无需通过服务器…

【STM32 HAL库】全双工DMA双buffer的I2S使用

1、配置I2S 我们的有效数据是32位的&#xff0c;使用飞利浦格式。 2、配置DMA **这里需要注意&#xff1a;**i2s的DR寄存器是16位的&#xff0c;如果需要发送32位的数据&#xff0c;是需要写两次DR寄存器的&#xff0c;所以DMA的外设数据宽度设置16位&#xff0c;而不是32位。…

ArrayLis练习

代码呈现 import java.util.ArrayList;public class ArrayListTest {public static void main(String[] args) {//创建集合ArrayList<String> list new ArrayList();//添加元素list.add("A");list.add("B");list.add("C");list.add(&quo…

222.买卖股票的最佳时机(力扣)

代码解决 class Solution { public:int maxProfit(vector<int>& prices) {// 初始化最小买入价为第一个价格int min1 prices[0];// 初始化最大利润为0int max1 0;// 从第二天开始遍历价格数组for (int i 1; i < prices.size(); i) {// 计算当前价卖出的利润&a…

C++:智能指针shared_ptr、unique_ptr、weak_ptr的概念、用法即它们之间的关系

智能指针 (1)概述 A.Why&#xff08;C为什么引入智能指针&#xff09; C引入智能指针的根本原因就是解决手动管理动态内存所带来的问题&#xff0c;手动管理动态内存常见的问题如下&#xff1a;内存泄漏、悬挂指针、释放操作未定义等 内存泄漏问题&#xff1a; 当程序用光了它…