1

【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库

 1 year ago
source link: https://blog.51cto.com/u_14772288/5543866
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库

推荐 原创

华为开发者论坛 2022-08-04 14:54:35 博主文章分类:HarmonyOS ©著作权

文章标签 JAVA UI OKHttp 文章分类 其它 移动开发 阅读数196


准备get请求接

【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库_JAVA UI

Post接口

【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库_OKHttp_02

1.​ ​OKHttp​

2.​ ​Android OkHttp常用详解​


1参考​ ​OKHttp​​的方法三

在项目级别的build.gradle添加如下代码

allprojects {
repositories {
maven {
url 'https://repo.huaweicloud.com/repository/maven/'
}
maven {
url 'https://developer.huawei.com/repo/'

在entry的build.gradle添加如下代码

'io.openharmony.tpc.thirdlib:okgo:1.0.2'
implementation 'io.openharmony.tpc.thirdlib:okrx:1.0.2'
implementation 'io.openharmony.tpc.thirdlib:okrx2:1.0.2'
implementation 'io.openharmony.tpc.thirdlib:okserver:1.0.2'

在entry的config.json添加 ​ ​权限​​ 代码如下

"reqPermissions": [
{
"name": "ohos.permission.INTERNET"

如果接口是https的话需要在config.json的deviceConfig里添加如下代码

"deviceConfig": {
"default": {
"network": {
"cleartextTraffic": true

在layout的xml中写三个Text标签,第一个Text用于触发get请求的事件,第二个Text用于触发Post请求的事件,第三个Text用于显示结果,代码和效果图如下

<?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:alignment="horizontal_center"
ohos:orientation="vertical">

<Text
ohos:id="$+id:text_type_get"
ohos:height="100vp"
ohos:width="match_parent"
ohos:text_alignment="center"
ohos:layout_alignment="horizontal_center"
ohos:text="Get请求"
ohos:text_size="40vp"
<Text
ohos:id="$+id:text_type_Post"
ohos:height="100vp"
ohos:text_alignment="center"
ohos:width="match_parent"
ohos:background_element="#ed6262"
ohos:layout_alignment="horizontal_center"
ohos:text="Post请求"
ohos:text_size="40vp"
<Text
ohos:id="$+id:text_result"
ohos:height="match_parent"
ohos:multiple_lines="true"
ohos:text_alignment="center"
ohos:width="match_parent"
ohos:layout_alignment="horizontal_center"
ohos:text="显示结果"
ohos:text_size="40vp"


</DirectionalLayout>
【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库_JAVA UI_08

Get请求实现


在Get的Text点击事件,实现 ​ ​Get请求​​和请求成功之后和请求失败之后(参考 ​ ​线程管理开发指导​​)需要将子线程切到Ui线程进行显示数据,代码如下

new Component.ClickedListener() {
@Override
public void onClick(Component component) {
OkHttpClient client = new OkHttpClient();
Request.Builder requestBuilder = new Request.Builder();
HttpUrl.Builder urlBuilder=HttpUrl.parse("http://web.juhe.cn/environment/air/cityair").newBuilder();//todo 接口链接
urlBuilder.addQueryParameter("city","shanghai");//todo 参数
urlBuilder.addQueryParameter("Key","******");// todo 密钥 key自己申请
requestBuilder.url(urlBuilder.build());
Call call = client.newCall(requestBuilder.build());
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//todo 失败回调 需要回到主线程显示结果
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
textResult.setText(e.getMessage());
}
});

}

@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String result = response.body().string();
//todo 处理UI需要切换到UI线程处理
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void

Post请求实现


在Post的Text实现点击事件,具体参考​ ​Android OkHttp常用详解​​,代码如下

TextPost.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
OkHttpClient client = new OkHttpClient();
FormBody body = new FormBody.Builder()
.add("key","*****")// todo 密钥 key自己申请
.add("date","10/1")//todo 日期参数
.build();
Request request = new Request.Builder()
.url("http://v.juhe.cn/todayOnhistory/queryEvent.php")
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//todo 失败回调 需要回到主线程显示结果
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
textResult.setText(e.getMessage());
}
});
}

@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String result = response.body().string();
//处理UI需要切换到UI线程处理
//todo 失败回调 需要回到主线程显示结果
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void

具体代码如下

java 代码

package com.harmony.alliance.myapplication.slice;

import com.harmony.alliance.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
import okhttp3.*;

import java.io.IOException;

public class MainAbilitySlice extends AbilitySlice
Text TextGet,TextPost,textResult;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
TextGet=findComponentById(ResourceTable.Id_text_type_get);
TextPost=findComponentById(ResourceTable.Id_text_type_Post);
textResult=findComponentById(ResourceTable.Id_text_result);
TextGet.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
OkHttpClient client = new OkHttpClient();
Request.Builder requestBuilder = new Request.Builder();
HttpUrl.Builder urlBuilder=HttpUrl.parse("http://web.juhe.cn/environment/air/cityair").newBuilder();//todo 接口链接
urlBuilder.addQueryParameter("city","shanghai");//todo 参数
urlBuilder.addQueryParameter("Key","6fba58dc50a8e3d92e8a2f63d25c7750");// todo key 密钥
requestBuilder.url(urlBuilder.build());
Call call = client.newCall(requestBuilder.build());
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//todo 失败回调 需要回到主线程显示结果
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
textResult.setText(e.getMessage());
}
});

}

@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String result = response.body().string();
//todo 处理UI需要切换到UI线程处理
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
textResult.setText(result);
}
});

}
}
});
}
});
TextPost.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
OkHttpClient client = new OkHttpClient();
FormBody body = new FormBody.Builder()
.add("key","7496ca7e5e12c408ef14e465c2bacc79")// todo 密钥
.add("date","10/1")//todo 日期参数
.build();
Request request = new Request.Builder()
.url("http://v.juhe.cn/todayOnhistory/queryEvent.php")
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//todo 失败回调 需要回到主线程显示结果
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
textResult.setText(e.getMessage());
}
});
}

@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String result = response.body().string();
//处理UI需要切换到UI线程处理
//todo 失败回调 需要回到主线程显示结果
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
textResult.setText(result);
}
});
}
}
});
}
});
}

@Override
public void onActive() {
super.onActive();
}

@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}

xml 代码

<?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:alignment="horizontal_center"
ohos:orientation="vertical">

<Text
ohos:id="$+id:text_type_get"
ohos:height="100vp"
ohos:width="match_parent"
ohos:text_alignment="center"
ohos:layout_alignment="horizontal_center"
ohos:text="Get请求"
ohos:text_size="40vp"
<Text
ohos:id="$+id:text_type_Post"
ohos:height="100vp"
ohos:text_alignment="center"
ohos:width="match_parent"
ohos:background_element="#ed6262"
ohos:layout_alignment="horizontal_center"
ohos:text="Post请求"
ohos:text_size="40vp"
<Text
ohos:id="$+id:text_result"
ohos:height="match_parent"
ohos:multiple_lines="true"
ohos:text_alignment="center"
ohos:width="match_parent"
ohos:layout_alignment="horizontal_center"
ohos:text="显示结果"
ohos:text_size="40vp"


</DirectionalLayout>

运行效果如下

【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库_JAVA UI_13

欲了解更多更全技术文章,欢迎访问​ ​https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh​

  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK