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

这篇具有很好参考价值的文章主要介绍了【HarmonyOS】元服务服务卡片网络开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【关键字】服务卡片、元服务、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 onError(Request request, Exception e)
	            {
	                
	            }
	
	            @Override
	            public void onResponse(String response)
	            {
	
	            }
	        });

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

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

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

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

需要注意的是,在初始化卡片的时候,需要使用的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后就可以进行卡片内容的刷新。

四、如何加载网络图片?

加载网络图片,官网是通过内存图片的方式进行加载的,参考链接如下:文档中心

同样我们可以使用okhttp获取网络图片的bytes内容,然后通过formBindingData.addImageData("xxx.png", 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;

}

定时刷新和点击触发刷新同理,就不再赘述了。文章来源地址https://www.toymoban.com/news/detail-726308.html

到了这里,关于【HarmonyOS】元服务服务卡片网络开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS/OpenHarmony元服务开发-配置卡片的配置文件

    卡片相关的配置文件主要包含FormExtensionAbility的配置和卡片的配置两部分: 1.卡片需要在module.json5配置文件中的extensionAbilities标签下,配置FormExtensionAbility相关信息。FormExtensionAbility需要填写metadata元信息标签,其中键名称为固定字符串“ohos.extension.form”,资源为卡片的具体配

    2024年02月14日
    浏览(27)
  • HarmonyOS/OpenHarmony元服务开发-ArkTS卡片运行机制

    一、实现原理 图1 ArkTS卡片实现原理   卡片使用方:显示卡片内容的宿主应用,控制卡片在宿主中展示的位置,当前仅系统应用可以作为卡片使用方。 卡片提供方:提供卡片显示内容的应用,控制卡片的显示内容、控件布局以及控件点击事件。 卡片管理服务:用于管理系统

    2024年02月16日
    浏览(35)
  • HarmonyOS/OpenHarmony元服务开发-卡片使用动效能力

    ArkTS卡片开放了使用动画效果的能力,支持显式动画、属性动画、组件内转场能力。需要注意的是,ArkTS卡片使用动画效果时具有以下限制:   以下示例代码实现了按钮旋转的动画效果:

    2024年02月15日
    浏览(25)
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发AbilityStage组件容器

    AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。 AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。 DevEco Studio默认工程中未自动生成AbilityStage,如需要使用AbilityStage的能力,可以手动新建一个

    2024年02月11日
    浏览(32)
  • 【HarmonyOS】服务卡片 API6 JSUI跳转不同页面

    【引言】 “JS卡片支持为组件设置action,包括router事件和message事件,其中router事件用于应用跳。若设置router事件,则action属性值为\\\"router\\\";abilityName为卡片提供方应用的跳转目标Ability名;params中的值按需填写,其值在使用时通过intent.getStringParam(\\\"params\\\")获取即可;”这一段是

    2024年02月12日
    浏览(29)
  • HarmonyOS鸿蒙基于Java开发: 基于JS UI实现的Java卡片开发

    使用hml+css+json开发JS卡片页面。 创建成功后,在config.json的module中会生成js模块,用于对应卡片的js相关资源,配置示例如下: config.json文件“abilities”配置forms模块细节如下。 说明 配置文件中,应注意如下配置: 表1  forms对象的内部结构说明 属性名称 子属性名称 含义

    2024年02月20日
    浏览(41)
  • 用HarmonyOS元服务万能卡片训练一下文心一言的AIGC能力

    一、部分效果图展示 1.服务卡片 2.AIGC服务 二、平板与手机视频效果演示 1.平板视频,运行比较慢,需要耐心观看,之所以先用平板模拟器运行,是通过现在的DEMO方式手机文心一言网页版页面兼容性暂时没法解决,没法输入内容。 用HarmonyOS元服务万能卡片训练一下文心平板电

    2024年02月16日
    浏览(26)
  • 【HarmonyOS】服务卡片 API6 JSUI跳转不同页面并携带参数

     【】 服务卡片、卡片跳转不同页面、卡片跳转页面携带参数 【写在前面】           本篇文章主要介绍开发服务卡片时,如何实现卡片点击跳转不同页面,并携带动态参数到js页面。在此篇文章“服务卡片 API6 JSUI跳转不同页面”中说明了如果跳转不同页面,这里在

    2024年02月06日
    浏览(33)
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发应用上下文Context使用场景二

    3.创建其他应用或其他Module的Context 基类Context提供创建其他应用或其他Module的Context的方法为createModuleContext(moduleName:string),创建其他应用或者其他Module的Context,从而通过该Context获取相应的资源信息(例如获取其他Module的获取应用开发路径信息)。 调用createModuleContext(moduleNa

    2024年02月11日
    浏览(44)
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发应用上下文Context使用场景一

    1.获取应用文件路径 基类Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。应用文件路径属于应用沙箱路径。上述各类Context获取的应用文件路径有所不同。 通过ApplicationContext获取应用级别的应用文件路径,此路

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包