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

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


 准备资料


接口准备

准备get请求接

cke_626.png

Post接口

cke_1283.png

参考资料

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用于显示结果,代码和效果图如下

            

cke_16866.png

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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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 代码

            

运行效果如下

04e802c1050ff1f71619ef29fbeb1738_384x811.gif%40900-0-90-f.gif

 

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