![](/style/images/good.png)
![](/style/images/bad.png)
【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库
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网络三方库
推荐 原创准备get请求接
![【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库_JAVA UI](https://s2.51cto.com/images/blog/202208/04145355_62eb6d03af73f20818.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
Post接口
![【Harmony OS】【JAVA UI】鸿蒙应用如何集成OKHttp网络三方库_OKHttp_02](https://s2.51cto.com/images/blog/202208/04145355_62eb6d03a83ae32140.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
1. OKHttp
2. Android OkHttp常用详解
1参考 OKHttp的方法三
在项目级别的build.gradle添加如下代码
repositories {
maven {
url 'https://repo.huaweicloud.com/repository/maven/'
}
maven {
url 'https://developer.huawei.com/repo/'
在entry的build.gradle添加如下代码
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添加 权限 代码如下
{
"name": "ohos.permission.INTERNET"
如果接口是https的话需要在config.json的deviceConfig里添加如下代码
"default": {
"network": {
"cleartextTraffic": true
在layout的xml中写三个Text标签,第一个Text用于触发get请求的事件,第二个Text用于触发Post请求的事件,第三个Text用于显示结果,代码和效果图如下
<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](https://s2.51cto.com/images/blog/202208/04145355_62eb6d03b07a262713.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
Get请求实现
在Get的Text点击事件,实现 Get请求和请求成功之后和请求失败之后(参考 线程管理开发指导)需要将子线程切到Ui线程进行显示数据,代码如下
@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常用详解,代码如下
@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 代码
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 代码
<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://s2.51cto.com/images/blog/202208/04145355_62eb6d03bcb1183987.gif)
欲了解更多更全技术文章,欢迎访问 https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
- 赞
- 收藏
- 评论
- 分享
- 举报
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK