Harmony OSJAVA UI鸿蒙应用如何集成OKHttp网络三方库

Posted 华为开发者论坛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Harmony OSJAVA UI鸿蒙应用如何集成OKHttp网络三方库相关的知识,希望对你有一定的参考价值。

准备资料


接口准备

准备get请求接

【Harmony

Post接口

【Harmony

参考资料

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/

【Harmony

在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

【Harmony

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

"reqPermissions": [

"name": "ohos.permission.INTERNET"

【Harmony

注意事项

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

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

【Harmony

界面实现


在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

【Harmony

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

【Harmony

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

【Harmony

运行效果


具体代码如下

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);

【Harmony

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:
ohos:text_alignment="center"
ohos:
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

运行效果如下

【Harmony

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

以上是关于Harmony OSJAVA UI鸿蒙应用如何集成OKHttp网络三方库的主要内容,如果未能解决你的问题,请参考以下文章

华为鸿蒙系统Harmony OS真的让谷歌慌了吗?

华为鸿蒙系统Harmony OS应用HAP开发学习

为什么“鸿蒙”不是第二个“安卓”,如何看待Harmony OS里的Android痕迹?

初识鸿蒙(Harmony)

华为鸿蒙系统 Harmony OS 发布会观看总结

Harmony OSArkUIets开发 创建视图与构建布局