首页 > 其他分享 >【HarmonyOS】元服务服务卡片网络开发

【HarmonyOS】元服务服务卡片网络开发

时间:2023-10-10 14:37:43浏览次数:36  
标签:服务 卡片 url FormBindingData HarmonyOS TAG new response

​【关键字】服务卡片、元服务、API6、网络请求、图片加载

 

一、API6服务卡片Java代码中如何进行网络请求?

API6服务卡片基于FormAbility,一般元服务默认工程中的FormAbility就是MainAbility。由于FormAbility是Java语言编写的,可以使okhttp进行网络请求相关的开发。

1、添加依赖:

首先在entry的build.gradle中添加如下依赖:

dependencies {

    implementation 'com.squareup.okhttp3:okhttp:3.14.9'

}

Okhttp相关的使用可以参考Okhttp官网文档,链接如下:Overview - OkHttp (square.github.io)

2、使用方法,这边以Get请求为例,说明一下Okhttp的简单用法:

初始化OkhttpClient和request:

OkHttpClient okHttpClient = new OkHttpClient();

Request request = new Request.Builder()

        .url(url)//请求地址

        .get()//Get方式请求

        .build();

a、同步请求:

try {

    Response response=okHttpClient.newCall(request).execute();

    if(response.isSuccessful()){

        HiLog.info(TAG,"response success "+response.body().string());

        response.close();

    }

} catch (IOException e) {

    throw new RuntimeException(e);

}

b、异步请求:

okHttpClient.newCall(request).enqueue(new Callback() {

    @Override

    public void onFailure(Call call, IOException e) {

        e.printStackTrace();

    }



    @Override

    public void onResponse(Call call, Response response) throws IOException {

        try{

            if (response.isSuccessful()) {

                HiLog.info(TAG,"response success "+response.body().string());

                response.close();

            }

        } catch (IOException e) {

             throw new IOException(e);

        }

    }

});

我们通过使用okhttputils工具类库可以进一步简化请求代码:

Okhttputils使用说明:okhttputils: 对okhttp的封装类 (gitee.com)

依赖引用:

dependencies {

   implementation 'io.openharmony.tpc.thirdlib:okhttputils:1.0.1'

}

同步请求:

 Response response = OkHttpUtils
    .get()//
    .url(url)//
    .tag(this)//
    .build()//
    .execute();

异步请求:

String url = "http://www.csdn.net/";
OkHttpUtils
    .get()
    .url(url)
    .addParams("username", "hyman")
    .addParams("password", "123")
    .build()
    .execute(new StringCallback()
	        {
	            @Override
	            public void one rror(Request request, Exception e)
	            {
	                
	            }
	
	            @Override
	            public void onResponse(String response)
	            {
	
	            }
	        });

二、如何通过网络请求数据进行服务卡片初始化?

由于我们是FormAbility的onCreateForm中完成卡片的创建,下面以创建卡片为例,说明该如何完成网络数据创建卡片。

如官网的示例中我们需要在onCreateForm中创建ProviderFormInfo,所以我们可以将通过网络请求获取的数据传入FormBindingData中,完成卡片的的初始化。

cke_155682.png​​

需要注意的是,在初始化卡片的时候,需要使用的Okhttp进行同步请求,请求完成后将数据传入FormBindingData,以下代码使用OkHttpUtils编写,,封装一个getData方法返回FormBindingData对象:

public FormBindingData getData(){

    try {

        Response response=OkHttpUtils.get().url("url").build().execute();

        String str=response.body().string();

        HiLog.info(TAG, "onCreateForm: body "+str);

        response.close();

        return  new FormBindingData(str);

    } catch (Exception e) {

        HiLog.info(TAG, "onCreateForm: Exception "+e.toString()+" "+e.getMessage());

    }

    return new FormBindingData();

}

也可以通过ZSONObject获取java bean后,创建FormBindingData对象,如下:

public FormBindingData getData(){

    try {

        Response response=OkHttpUtils.get().url("url").build().execute();

        String str=response.body().string();

        HiLog.info(TAG, "onCreateForm: body "+str);

        response.close();

        HotData hotData=ZSONObject.stringToClass(str, HotData.class);//str转化为java对象

        ZSONObject zsonObject = new ZSONObject();

        zsonObject.put("data",hotData.getData());//获取对象中的字段,赋值给ZSONObject

        return new FormBindingData(zsonObject);//通过ZSONObject创建FormBindingData

    } catch (Exception e) {

        HiLog.info(TAG, "onCreateForm: Exception "+e.toString()+" "+e.getMessage());

    }

    return new FormBindingData();

}

创建FormBindingData后传入formInfo完成卡片初始化:

ProviderFormInfo formInfo = new ProviderFormInfo();

formInfo.setJsBindingData(getData());

return formInfo;

三、如何在卡片触发事件和定时定点刷新时通过网络请求刷新卡片内容?

卡片的点击事件会在onTriggerFormEvent中触发,定时定点刷新需要在onUpdateform中完成,所有的更新卡片的操作都是通过updateForm(formId, formBindingData)方法完成的。所以,同样可以使用getData方法获取formBindingData后就可以进行卡片内容的刷新。

 

四、如何加载网络图片?

加载网络图片,官网是通过内存图片的方式进行加载的,参考链接如下:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-widget-provider-js-0000001150602175#section2608945203212

同样我们可以使用okhttp获取网络图片的bytes内容,然后通过bytes数据可以用以下方法获取

public byte[] getImageData(String url){

    byte[] bytes=null;

    try {

        Response response=OkHttpUtils.get().url(url).build().execute();

        if(response.isSuccessful()){

            if(response.body()!=null){

                bytes= response.body().bytes();

            }

            response.close();

            HiLog.info(TAG, "getImageData: success");

        }else{

            HiLog.info(TAG, "getImageData: failed");

        }

    } catch (IOException e) {

        throw new RuntimeException(e);

    }

    return bytes;

}

然后在onCreateForm中参考官网方法进行初始化:

@Override

protected ProviderFormInfo onCreateForm(Intent intent) {

    HiLog.info(TAG, "onCreateForm");

    ZSONObject zsonObject = new ZSONObject();

    String image="logo"+System.currentTimeMillis()+".png";

    HiLog.info(TAG, "onCreateForm: image=" + image);

    zsonObject.put("imageSrc", "memory://"+image);

    FormBindingData formBindingData = new FormBindingData(zsonObject);

    ProviderFormInfo formInfo = new ProviderFormInfo();

    formBindingData.addImageData(image,getImageData("url"));

    formInfo.setJsBindingData(formBindingData);

    return formInfo;

}

定时刷新和点击触发刷新同理,就不再赘述了。

标签:服务,卡片,url,FormBindingData,HarmonyOS,TAG,new,response
From: https://www.cnblogs.com/mayism123/p/17754565.html

相关文章

  • 常用的服务积累(端口)
    在Linux中,我们常用的服务有哪些?在Linux中,有许多重要的服务用于管理和维护系统。下面是一些常见的重要服务以及它们的作用:SSH服务(sshd)22端口:SecureShell(SSH)是一种加密的网络协议,用于在不安全的网络上安全地进行远程登录和执行命令。sshd服务提供了远程登录到Linux系......
  • C++ libwebsockets搭建WebSocket服务端及Http客户端、服务端
    https://blog.csdn.net/fantasysolo/article/details/88908948  概念WebRTCWebRTC,名称源自网页即时通信(英语:WebReal-TimeCommunication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联......
  • Nginx 如何建立多个web服务 使用不同端口
    server{listen8080;server_nameip;#charsetkoi8-r;#access_loglogs/host.access.logmain;article/list/0/jsonlocation/{if($request_method='OPTIONS'){r......
  • 服务器数据恢复-DS5300存储多块硬盘出现坏道离线导致raid5阵列崩溃的数据恢复案例
    服务器数据恢复环境:某单位一台DS5300存储,1个主机+4个扩展柜,组建了2组RAID5(一组27块硬盘,一组23块盘)。27块盘的那组RAID5阵列存放Oracle数据库文件,存储系统一共分了11个卷。服务器故障:27块盘的那组RAID5阵列中有2块磁盘故障离线,导致RAID阵列崩溃,存储不可用,存储设备已经过保。服务......
  • 苹果TF签名的服务流程
    苹果TF签名的服务流程一般如下:客户需要提供应用的ipa包,而不需要进行预审,上传即付钱即审核。需要先预览App图标。应用在申请签名时需要提供icon,而icon需要经过苹果alpha通道的审核才能使用。需要提供BundleID,一个可重复使用唯一标识符来帮助用户唯一地识别和找到这个App的所......
  • 小程序订阅消息(服务通知)实现 wx.requestSubscribeMessage
     第一步:根据官方文来,先在微信公众平台登录小程序后台配置模板,获取模板id:,这块的模版可以在公共模版库里选。也可以新申请,但是需要3-7天才能出审核结果。  第二步,获取下发权限在获取下发权限之前,需要先获取小程序code和订阅消息的模板id给服务端,以便后台人员进行服务端配......
  • 8种品牌PLC单片机使用Socket编程实现以太网开放式通信服务器视频教程
    8种品牌PLC单片机使用Socket编程实现以太网开放式通信服务器视频教程一、罗克韦尔ABMicro850系列PLC实现ModbusTCP以太网通信协议​服务器视频教程:罗克韦尔ABMicro850系列PLC做ModbusTCP以太网通信服务器、以太网调试助手和ModbusPoll调试助手做ModbusTCP以太网通信客户端,......
  • RestTemplate实现不同注册中心服务间通信
    如果两个服务不在同一个注册中心,这时可以通过使用SpringCloud的服务发现功能来实现。具体地,您可以使用@LoadBalanced注解为RestTemplate创建一个负载均衡的客户端,并使用服务名称作为URL。例如,假设您有两个注册中心,一个名为registry1,另一个名为registry2。您的服务service1在regi......
  • Docker 本地化镜像导入导出(针对服务器无法连接外网进行更新)
    镜像在开发公网测试环境中是可以下载的,但在某些生产环境中是无法访问外网进行镜像的拉取。这时候就只能在测试或者开发环境先保存镜像,然后复制到生产的机器,然后加载到生产本地机器,下面就来介绍下该如何操作。1.下载镜像到本地dockerpullregistry.cn-shenzhen.aliyuncs.com......
  • 网安周报|Mixin Network 云服务商数据库遭到攻击,涉案金额约 2 亿美元
    1、MixinNetwork云服务商数据库遭到攻击,涉案金额约2亿美元MixinNetwork是一个开源的数字资产点对点交易网络,今天在Twitter上宣布,由于该平台遭受了黑客攻击,存款和取款立即暂停。据报道,该攻击的目标是Mixin云服务提供商的数据库,涉案金额约2亿美元。由于在黑客攻击中损失了大量资......