在HarmonyOS鸿蒙Next环境下,优雅的完成Http访问网络【教程】

在HarmonyOS鸿蒙Next环境下,优雅的完成Http访问网络【教程】

1.原始的网络访问,再加上多线程,会使程序臃肿

网络请求在现代的应用开发中必不可少,我们熟知的网络请求框架真不少,像HttpClientOKHttp还有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

9 回复

这个必须赞,太实用了!

更多关于在HarmonyOS鸿蒙Next环境下,优雅的完成Http访问网络【教程】的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你好,想问一下ZZRHttp请求的时候想要携带cookie怎么带呢?

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

讲的很棒,可以在你的gitee上传一个吗

你这个有js的案例吗??

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访问网络可以通过以下步骤实现:

  1. 导入依赖:在build.gradle中添加ohos.net依赖。
  2. 创建Http请求:使用HttpURLConnectionHttpClient类创建请求对象。
  3. 设置请求参数:配置请求方法(GET/POST)、请求头、超时时间等。
  4. 发送请求:调用connect()方法发送请求。
  5. 处理响应:读取响应数据,处理状态码和响应体。
  6. 异常处理:捕获并处理网络请求中的异常。
  7. 异步处理:使用TaskDispatcherAsyncTask进行异步网络请求,避免阻塞主线程。

示例代码:

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();
回到顶部