在鴻蒙(HarmonyOS)環境下,優雅的完成Http訪問網絡【教程】
想了解更多內容,請訪問:
51CTO和華為官方合作共建的鴻蒙技術社區
https://harmonyos.51cto.com
1 .原始的網絡訪問,再加上多線程,會使程序臃腫
網絡請求在現代的應用開發中必不可少,我們熟知的網絡請求框架還真不少,像HttpClient、OkHttp還有volley等,它們確實方便但鴻蒙還不能使用它們,還好我們有HttpURLConnection。使用其進行網絡請求的示例代碼,如下圖所示(不用仔細研究):
相信你想說:HttpURLConnection雖略有繁瑣,但能用。然而,這并不是我們要處理網絡訪問的全部。因為網絡操作耗時及不穩定性,使得我們必須在子線程中進行上述代碼的工作,等到網絡請求有響應結果了,我們又需要回到主線程更新UI,這又使得我們的程序又胖了一圈。如果請求,再多一點呢?我們的程序就胖了好幾圈...
2.將多線程與網絡訪問封裝,為程序瘦身
我們希望的網絡請求是這樣的:1.隱藏網絡訪問細節;2.優雅處理UI更新。
基于以上兩點,我封裝了一套Http請求的工具類,最終的網絡訪問會變成——這樣:
- ZZRHttp.get(url, new ZZRCallBack.CallBackString() {
- @Override
- public void onFailure(int code, String errorMessage) {
- //http訪問出錯,此部分在主線程中工作,可以更新UI等操做。
- }
- @Override
- public void onResponse(String response) {
- //http訪問成功,此部分在主線程中工作,可以更新UI等操作。
- }
- });
代碼解析:此get方法能夠在子線程中完成基于http網絡訪問, 當訪問成功或者失敗,就會分別回調onResponse或onFailure方法,這兩個方法是在主線程中完成回調的,所以可以更新UI。
我已將這套Http工具類的源代碼,開源上傳至github,地址如下:https://github.com/zzrv5/ZZRHttp
3.鴻蒙Http請求操作步驟:
3.1 添加網絡訪問權限:
在config.json文件中的module中添加,網絡訪問權限,代碼如下所示:
- "module": {
- "reqPermissions": [{"name":"ohos.permission.INTERNET"}],
- ...
3.2 設置訪問模式
鴻蒙的默認是https訪問模式,如果您的請求網址是http開頭的,請在config.json文件中的deviceConfig下,添加如下設置:
- "deviceConfig": {
- "default": {
- "network": {
- "cleartextTraffic": true
- }
- }
- },
3.3 添加ZZRHttp依賴
在build.gradle文件的dependencies中,添加如下配置,引入ZZRhttp:
- dependencies {
- implementation 'com.zzrv5.zzrhttp:ZZRHttp:1.0.1'
- ...
- }
3.4 進行網絡訪問
就是這么簡單,代碼如下:
- ZZRHttp.get(url, new ZZRCallBack.CallBackString() {
- @Override
- public void onFailure(int code, String errorMessage) {
- //http訪問出錯,此部分在主線程中工作,可以更新UI等操做。
- }
- @Override
- public void onResponse(String response) {
- //http訪問成功,此部分在主線程中工作,可以更新UI等操作。
- }
- });
4.關于我
我是ZZR老師,為什么叫ZZR老師,是因為ZZR是我名字的縮寫,同學們可以在: https://edu.51cto.com/course/25200.html ,看到我的鴻蒙視頻課程。
想了解更多內容,請訪問:
51CTO和華為官方合作共建的鴻蒙技術社區
https://harmonyos.51cto.com