HarmonyOS实战—天气类卡片设计(二)

简介: HarmonyOS实战—天气类卡片设计(二)

卡片初始化


对于创建的Js卡片,其卡片初始化的一些数据是在Java类中进行的,这里是在WidgetImpl.java类中,对应的初始化方法为bindFormData()方法。


代码如下:

public class WidgetImpl extends FormController {
  //卡片初始化时方法
    @Override
    public ProviderFormInfo bindFormData() {
        HiLog.info(TAG, "开始");
        ZSONObject object = new ZSONObject();
        object.put("weatherList", getData("北京"));
        FormBindingData bindingData = new FormBindingData(object);
        ProviderFormInfo formInfo = new ProviderFormInfo();
        formInfo.setJsBindingData(bindingData);
        return formInfo;
    }
}


如上面代码所示,我们这里将刚才获取的7日json数据设置到ZSONObject中,并指定其在js的变量名为weatherList,对应index.json文件中data中的数据。


刷新天气功能实现


其次,我们不仅需要展示天气数据,而且需要提供给用户一个自己手动更新天气的按钮进行交互。


交互的功能也在WidgetImpl类中,由onTriggerFormEvent()方法进行处理。代码如下所示:

public class WidgetImpl extends FormController {
// 卡片消息事件时方法
    @Override
    public void onTriggerFormEvent(long formId, String message) {
        ZSONObject zsonObject = ZSONObject.stringToZSON(message);
        HiLog.info(TAG, "onTriggerFormEvent");
        ZSONObject result = new ZSONObject();
        switch (zsonObject.getString("mAction")) {
            case "refresh":
                result.put("weatherList",getData("宜昌"));
                break;
            default:
                break;
        }
        // Update js card
        try {
            if (mContext instanceof Ability) {
                ((Ability) mContext).updateForm(formId, new FormBindingData(result));
            }
        } catch (FormException e) {
            HiLog.error(TAG, e.getMessage());
        }
    }
}


如上面代码所示,这里通过mAction机型判断,需要处理的是哪个时间。当然,这里的天气卡片,我们只提供了一个刷新功能,所以只有一个事件。


但在实际的项目中,卡片的交互功能往往很多,比如说音乐类App提供一个卡片进行音乐的播放交互,那么就会提供播放,暂停,下一首,上一首等很多功能。


那么就可以直接通过swicth进行事件字符串的判断,区分其进行的处理方式。


这里,为了用户能看到真正的交互效果,我们将城市进行了切换,毕竟7日天气同一城市,短时间是没有任何变化的。


到这里,基本的交互功能以及界面就全部完成了,实现的效果如首图所示。


卡片界面的样式


在前面我们只介绍了卡片的布局index.hml,以及卡片的交互基本数据的定义index.json。但之所以卡片的界面如首图一样显示,是因为样式index.css:

.card_root_layout {
    flex-direction: column;
    width: 100%;
    height: 100%;
    background-image: url("common/cardbg.jpg");
}
.refresh_image {
    width: 30px;
    height: 30px;
    margin-left: 10px;
    margin-top: 10px;
    object-fit: contain;
}
.weather_list{
    margin-top: 2px;
    margin-left: 10px;
    margin-right: 10px;
    margin-bottom: 10px;
    flex-direction: row;
    height: 100%;
    width: 100%;
    align-content: center;
    align-items: center;
    justify-content: center;
}
.list_item{
    margin-right: 10px;
}
.list_div{
    flex-direction: column;
    align-items: center;
}
.list_text{
    font-size: 15px;
    margin-top: 15px;
}
.list_image{
    height: 30px;
    object-fit: contain;
    margin-top: 20px;
}


网络请求


在上面,我们是通过自己定义的网络请求,获取json数据字符串的。这里,博主直接给出定义的网络请求类(LYJUtils.java)的代码:

public class LYJUtils {
    public static String doGet(String httpUrl) {
        HttpsURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;// 返回结果字符串
        try {
            // 创建远程url连接对象
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
            connection = (HttpsURLConnection) url.openConnection();
            // 设置连接方式:get
            connection.setRequestMethod("GET");
            // 设置连接主机服务器的超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间:60000毫秒
            connection.setReadTimeout(60000);
            // 发送请求
            connection.connect();
            // 通过connection连接,获取输入流
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 封装输入流is,并指定字符集
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                // 存放数据
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            connection.disconnect();// 关闭远程连接
        }
        return result;
    }
}


定义权限


这里,因为我们获取了网络数据。所以,我们需要赋予应用网络权限,具体权限的定义在config.json文件中,代码如下所示:

"module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ],
    "package": "com.liyuanjinglyj.jsweather",


源代码下载地址:https://gitee.com/liyuanjinglyj/JsWeather

相关文章
|
2月前
|
JavaScript API 数据处理
基于HarmonyOS 5.0 (Next)技术的渐变模糊效果技术实现【代码实战】
本文详细介绍如何在HarmonyOS 5.0(Next)中实现渐变模糊效果,涵盖从基础页面搭建到添加模糊、渐变效果的全过程,并通过代码实战展示具体操作步骤。文章首先介绍了使用`Stack`和`Image`控件设置背景并应用`foregroundBlurStyle`属性实现模糊效果,接着通过`linearGradient`属性融入渐变效果,使界面更加精致美观。此外,还展示了如何利用滑动条和手势等交互元素动态调整模糊与渐变效果,增强用户体验。最后,通过具体代码示例说明如何为图片、弹窗等控件添加渐变模糊效果,突显HarmonyOS的强大功能与灵活性。
112 17
|
2月前
|
数据管理 API 调度
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
HarmonyOS Next 是华为新一代操作系统,专注于分布式技术的深度应用与生态融合。本文通过技术特点、应用场景及实战案例,全面解析其核心技术架构与开发流程。重点介绍分布式软总线2.0、数据管理、任务调度等升级特性,并提供基于 ArkTS 的原生开发支持。通过开发跨设备协同音乐播放应用,展示分布式能力的实际应用,涵盖项目配置、主界面设计、分布式服务实现及部署调试步骤。此外,深入分析分布式数据同步原理、任务调度优化及常见问题解决方案,帮助开发者掌握 HarmonyOS Next 的核心技术和实战技巧。
261 76
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
|
2月前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
76 8
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
2月前
|
安全 数据安全/隐私保护 UED
HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】
### HarmonyOS 5.0(Next)应用开发实战:使用ArkTS构建开箱即用的登录页面 HarmonyOS 5.0(Next)融合了美学与科技,引入“光感美学”设计理念和多设备深度协同功能。本文通过 ArkTS 构建一个简单的登录页面,展示了模块化导入、状态管理、方法封装、声明式UI构建及事件处理等最佳实践。代码实现了一个包含用户名和密码输入框及登录按钮的界面,支持错误提示和页面跳转。
183 14
HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】
|
2月前
|
2月前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
196 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
2月前
|
Dart 前端开发 IDE
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。
304 4
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
|
2月前
|
人工智能 安全 数据安全/隐私保护
HarmonyOS应用开发实战:基于ArkTS的开箱即用登录页面实现【样式方式实现①】【HarmonyOS 5.0(Next)】
本文介绍了基于HarmonyOS 5.0(Next)和ArkTS实现的开箱即用登录页面。HarmonyOS 5.0是华为于2024年10月22日发布的第三代移动操作系统,具备原生智能、互联、安全及流畅特性。文章详细解析了使用ArkTS开发登录页面的代码,涵盖组件定义、界面布局、事件处理、样式设置及异步操作等内容,展示了清晰的组件结构、响应式设计与模块化编程的优势。通过这段代码,开发者可以快速上手并构建高效、美观的应用界面。
188 9
|
3天前
鸿蒙开发:了解@Builder装饰器
@Builder装饰是鸿蒙UI开发中,非常重要的一个装饰器,在实际的开发中,合理且正确的使用,能够让我们的代码更加的简洁,有两点需要注意,一是,是用私有还是全局,取决于当前的组件的复用机制,如果多个页面都使用了,建议以全局为主;二是传参的动态更新,有更新就使用引用参数传递,没有更新按值传递即可。
50 28
|
1月前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
112 47
Harmony OS开发-ArkTS语言速成二

热门文章

最新文章