我们在做鸿蒙应用开发过程,用 java 原生的 HttpsURLConnection 实现网络请求很难高效的达到预期的效果。我们需要处理数据解析,子线程通知 UI 线程更新。
这里我们就基于三方原生的网络框架AsyncHttpClient 二次封装更加高效实现网络请求及数据解析。同时鸿蒙为我们提供了一个TaskDispatcher 类派发同步任务达到更新 UI 的效果
在应用模块中调用 HAR,常用的添加依赖的方式包括如下两种。
方式一:依赖本地 HAR
第一步:将 httplibrary-debug.har 复制到 entry\libs 目录下即可(由于 build.gradle 中已经依赖的 libs 目录下的*.har,因此不需要在做修改)。
查看工程目录中 build.gradle 下的*.har 是存在
第二步:除了依赖以上 har 之外还需要添加外部依赖用来实现 Header 类的引入,引入方式如下图,引入完之后同步下就可以使用。
以上操作无误之后就可以进行编码了!
定义一个 Text 文本用来显示请求返回的数据,定义一个 text 实现请求点击事件
核心代码是 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);
}
}
请求前:
点击 get 请求之后
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
https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr18.cn/F781PH
https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向
更多【arm开发-基于 OpenHarmony AsyncHttpt 网络请求组件开发指南】相关视频教程:www.yxfzedu.com