鴻蒙HarmonyOS三方件開發(fā)指南(3)-AsyncHttpHarmony組件
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
1. AsyncHttpHarmony功能介紹
1.1. 組件介紹
在做HarmonyOS開發(fā)過程中,用java原生的HttpsURLConnection實(shí)現(xiàn)網(wǎng)絡(luò)請求很難高效的達(dá)到預(yù)期效果。我們需要高效的處理數(shù)據(jù)解析,更加快捷的實(shí)現(xiàn)UI線程更新,這里基于方網(wǎng)絡(luò)框架AsyncHttpClient二次封裝,更加高效實(shí)現(xiàn)網(wǎng)絡(luò)請求及數(shù)據(jù)處理。同時HarmonyOS為我們提供了TaskDispatcher類派發(fā)同步任務(wù),達(dá)到更新UI的效果。
1.2. TV模擬器上運(yùn)行效果
請求前:

點(diǎn)擊get請求之后:

2. AsyncHttpHarmony使用方法
2.1. 為應(yīng)用添加httplibrary-debug.har包依賴
在應(yīng)用模塊中調(diào)用HAR,常用的添加依賴的方式包括如下兩種。
Ø 方式一:依賴本地HAR
第一步:將httplibrary-debug.har復(fù)制到entry\libs目錄下即可(由于build.gradle中已經(jīng)依賴libs目錄下的*.har,因此不需要再做修改)。

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

第二步:需要添加外部依賴實(shí)現(xiàn)Header類的引入,引入方式如下圖,引入完之后同步下即可可以使用。

2.2. 為應(yīng)用添加網(wǎng)絡(luò)權(quán)限,config.json文件部分代碼如下:
- "reqPermissions": [
- {
- "name": "ohos.permission.INTERNET",
- "reason": "",
- "usedScene": {
- "ability": [
- "com.example.ohosdemo.MainAbility",
- "com.example.ohosdemo.slice.MainAbilitySlice"
- ],
- "when": "always"
- }
- },
以上操作無誤之后就可以進(jìn)行編碼了!
3. AsyncHttpHarmony開發(fā)實(shí)現(xiàn)
3.1. 主頁面的布局文件
定義一個Text文本用來顯示請求返回的數(shù)據(jù),一個text實(shí)現(xiàn)請求點(diǎn)擊事件
- <?xml version="1.0" encoding="utf-8"?>
- <DirectionalLayout
- xmlns:ohos="http://schemas.huawei.com/res/ohos"
- ohos:height="match_parent"
- ohos:width="match_parent"
- ohos:orientation="vertical">
- <Text
- ohos:id="$+id:tvResult"
- ohos:height="match_content"
- ohos:width="match_content"
- ohos:background_element="$graphic:background_ability_main"
- ohos:layout_alignment="horizontal_center"
- ohos:text="數(shù)據(jù)顯示"
- ohos:text_size="50"
- ohos:top_margin="180vp"
- />
- <Text
- ohos:id="$+id:tvRequest"
- ohos:height="match_content"
- ohos:width="match_content"
- ohos:background_element="$graphic:background_ability_main"
- ohos:layout_alignment="horizontal_center"
- ohos:text="get請求"
- ohos:text_size="50"
- ohos:top_margin="80vp"
- />
- </DirectionalLayout>
3.2. MainAbilitySlice代碼如下
核心代碼是initListener,其中聲明了一個 AsyncHttpClient對象,設(shè)置請求參數(shù),調(diào)用get方法獲取ulr返回結(jié)果,然后通過TaskDispatcher類派發(fā)同步任務(wù)達(dá)到更新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實(shí)例, 這個類提供了get post delete put 請求對外的接口方法
- AsyncHttpClient client=new AsyncHttpClient();
- //這里是我們包裝參數(shù)的實(shí)體類
- RequestParams params=new RequestParams();
- params.put("city","西安");
- params.put("key",key);
- /這里是實(shí)現(xiàn)get請求的方,JsonHttpResponseHandler會重寫請求成功的onSuccess和onFailure兩個方法,兩個方法內(nèi)部做具體業(yè)務(wù)邏輯
- 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() {
- // 這里具體業(yè)務(wù)Text文本顯示請求數(shù)據(jù)
- 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);
- }
- }
項(xiàng)目源代碼地址:https://github.com/isoftstone-dev/Http-Async-HarmonyOS
©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz