在HarmonyOS鸿蒙Next环境下,优雅的完成Http访问网络【教程】
在HarmonyOS鸿蒙Next环境下,优雅的完成Http访问网络【教程】
1.原始的网络访问,再加上多线程,会使程序臃肿
网络请求在现代的应用开发中必不可少,我们熟知的网络请求框架真不少,像HttpClient
、OKHttp
还有volley
等,它们确实方便但鸿蒙还不能使用它们,还好我们有HttpURLConnection
。使用其进行网络请求的示例代码,如下图所示(不用仔细研究):
![示例代码图片]
相信你想说:HttpURLConnection虽略有繁琐,但能用。然而,这并不是我们要处理网络访问的全部。因为网络操作耗时及不稳定性,使得我们必须在子线程中进行上述代码的工作,等到网络请求有响应结果了,我们又需要回到主线程更新UI,这又使得我们的程序又胖了一圈。如果请求,请求再多一点呢?我们的程序就胖了好几圈…
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.鸿蒙App 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等操作。
}
});
更多关于在HarmonyOS鸿蒙Next环境下,优雅的完成Http访问网络【教程】的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个必须赞,太实用了!
更多关于在HarmonyOS鸿蒙Next环境下,优雅的完成Http访问网络【教程】的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你好,想问一下ZZRHttp请求的时候想要携带cookie怎么带呢?
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17
讲的很棒,可以在你的gitee上传一个吗
你这个有js的案例吗??
js怎么实现python这样的案例
在HarmonyOS鸿蒙Next环境下,进行Http访问网络可以通过使用@ohos.net.http
模块来实现。该模块提供了HttpRequest
类,用于发送HTTP请求并接收响应。以下是一个简单的示例代码,展示如何发送GET请求:
import http from '@ohos.net.http';
// 创建HttpRequest对象
let httpRequest = http.createHttp();
// 定义请求的URL
let url = 'https://api.example.com/data';
// 发送GET请求
httpRequest.request(url, {
method: http.RequestMethod.GET,
header: {
'Content-Type': 'application/json'
}
}, (err, data) => {
if (err) {
console.error('Request failed:', err);
return;
}
console.log('Response data:', data.result);
});
对于POST请求,可以通过以下方式实现:
import http from '@ohos.net.http';
// 创建HttpRequest对象
let httpRequest = http.createHttp();
// 定义请求的URL
let url = 'https://api.example.com/data';
// 定义请求体
let body = JSON.stringify({
key1: 'value1',
key2: 'value2'
});
// 发送POST请求
httpRequest.request(url, {
method: http.RequestMethod.POST,
header: {
'Content-Type': 'application/json'
},
extraData: body
}, (err, data) => {
if (err) {
console.error('Request failed:', err);
return;
}
console.log('Response data:', data.result);
});
在HarmonyOS中,@ohos.net.http
模块还支持其他HTTP方法,如PUT、DELETE等,使用方法类似。通过这种方式,可以在鸿蒙Next环境下优雅地完成Http访问网络。
在HarmonyOS鸿蒙Next环境下,优雅地完成Http访问网络可以通过以下步骤实现:
- 导入依赖:在
build.gradle
中添加ohos.net
依赖。 - 创建Http请求:使用
HttpURLConnection
或HttpClient
类创建请求对象。 - 设置请求参数:配置请求方法(GET/POST)、请求头、超时时间等。
- 发送请求:调用
connect()
方法发送请求。 - 处理响应:读取响应数据,处理状态码和响应体。
- 异常处理:捕获并处理网络请求中的异常。
- 异步处理:使用
TaskDispatcher
或AsyncTask
进行异步网络请求,避免阻塞主线程。
示例代码:
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
// 处理输入流
}
connection.disconnect();