【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库
2022/8/8 14:22:55
本文主要是介绍【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
准备资料
接口准备
准备get请求接
Post接口
参考资料
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/' } allprojects{ repositories{ mavenCentral() } } } }
在entry的build.gradle添加如下代码
implementation '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>
Get请求实现
在Get的Text点击事件,实现 Get请求和请求成功之后和请求失败之后(参考 线程管理开发指导)需要将子线程切到Ui线程进行显示数据,代码如下
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","******");// 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); } }); } } }); } });
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 run() { textResult.setText(result); } }); } } }); } });
运行效果
具体代码如下
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>
运行效果如下
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
这篇关于【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行
- 2024-05-08阿里云域名注册流程,分享给第一次购买域名的新手站长!