基于 OpenHarmony AsyncHttpt 网络请求组件开发指南

314 篇文章 8 订阅
249 篇文章 7 订阅

1. AsyncHttpHarmony 功能介绍

我们在做鸿蒙应用开发过程,用 java 原生的 HttpsURLConnection 实现网络请求很难高效的达到预期的效果。我们需要处理数据解析,子线程通知 UI 线程更新。

这里我们就基于三方原生的网络框架AsyncHttpClient 二次封装更加高效实现网络请求及数据解析。同时鸿蒙为我们提供了一个TaskDispatcher 类派发同步任务达到更新 UI 的效果

2. AsyncHttpHarmony 使用方法

2.1. 为应用添加 httplibrary-debug.har 包依赖

在应用模块中调用 HAR,常用的添加依赖的方式包括如下两种。

方式一:依赖本地 HAR
第一步:将 httplibrary-debug.har 复制到 entry\libs 目录下即可(由于 build.gradle 中已经依赖的 libs 目录下的*.har,因此不需要在做修改)。

查看工程目录中 build.gradle 下的*.har 是存在

第二步:除了依赖以上 har 之外还需要添加外部依赖用来实现 Header 类的引入,引入方式如下图,引入完之后同步下就可以使用。

以上操作无误之后就可以进行编码了!

2.2. 主页面的布局文件

定义一个 Text 文本用来显示请求返回的数据,定义一个 text 实现请求点击事件

2.3. MainAbilitySlice 代码如下

核心代码是 initListener,其中声明了一个 AsyncHttpClient 对象,设置请求参数,然后调用 get 方法获取 ulr 返回结果,然后通过 TaskDispatcher 类派发同步任务达到更新 UI 的效果,

代码如下:

package com.huawei.asynchttpharmonyos.slice;
import com.example.httplibrary.utils.AsyncHttpClient;
import com.example.httplibrary.utils.JsonHttpResponseHandler;
import com.example.httplibrary.utils.RequestParams;
import com.huawei.asynchttpharmonyos.ResourceTable;
import cz.msebera.android.httpclient.Header;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
public class MainAbilitySlice extends AbilitySlice {
private Text tvRequest,tvResult;
private static final String TAG = "MainAbilitySlice";
private static final HiLogLabel label=new
HiLogLabel(HiLog.DEBUG,0x00100,"async-http");
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
initView();
initListener();
}

private void initView() {
tvResult = (Text) findComponentById(ResourceTable.Id_tvResult);
tvRequest = (Text) findComponentById(ResourceTable.Id_tvRequest);
}
private void initListener() {
tvRequest.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
String url="https://apis.juhe.cn/simpleWeather/query";
String key="32becf485f7f174d4385957b62f28f61";
//这里获取 AsyncHttpClient 实例,这个类提供了 get post delete put 请
求对外的接口方法
AsyncHttpClient client=new AsyncHttpClient();
//这里是我们包装参数的实体类
RequestParams params=new RequestParams();
params.put("city","西安");
params.put("key",key);
/这里是实现 get 请求的方,JsonHttpResponseHandler 会重写请求成功的
onSuccess 和 onFailure 两个方法,两个方法内部做具体业务逻辑
client.get(url,params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
String responseString) {
super.onSuccess(statusCode, headers, responseString);
HiLog.error(label,"zel-onSuccess:"+responseString,responseString);
// 通知主线程更新 UI
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
// 这里具体业务 Text 文本显示请求数据
tvResult.setText(responseString);
}
});
}
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
super.onFailure(statusCode, headers, responseString,throwable);
HiLog.error(label,"zel-onFailure:"+responseString,responseString);
}
});
}
});
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}

3. AsyncHttpHarmonyDemo 实现效果

请求前:

点击 get 请求之后

4. AsyncHttpHarmony 核心方法说明

AsyncHttpClient :通过实例对象的 get 方法发起 get 请求实现内部两个方法(请求成功
失败方法)

1:onSuccess(int statusCode, Header[] headers, String responseString) {} 其中第三个参数就是返回的数据

2:onFailure(int statusCode, Header[] headers, String responseString, Throwablethrowable) {} responseString 返回请求失败的 json 数据

AbilityContext:由 AbilitySlice 继承过来的 getUITaskDispatcher()返回一个 TaskDispatcher 实例来分发任务,TaskDispatcher 是一个任务分发器,它是 Ability 分发任务的基本接口,隐藏任务所在线程的实现细节,主要特点是在 UI 线程上运行的任务默认以高优先级运行通过 syncDispatch()派发同步任务达到更新 UI 的效果

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值