【我是个快乐的搬运工连载系列④】之 分析怎么做好自己...

[复制链接]
 楼主| caijie001 发表于 2018-3-1 15:40 | 显示全部楼层 |阅读模式
TE, ce, ge, ic, vi
注:本帖为转载系列,征得“半颗心脏”博主(我老乡)的同意。哎呀,老家人才还是蛮多的

原贴地址:第一篇:认识开源框架结构,导入PK、APP的id和secret。
                 第二篇:详细分析在设备列表的代码块,如何修改自定义的设备图片。
                 第三篇 : 分析设备详情界面的中如何发送各种指令到云端:boolean、int、String类型。
                 第四篇 : 分析怎么做好自己的指令是否成功发送到云端对应的逻辑处理
1、 认识无所不在的类 Gi1、 必须涉及到的类 GizWifiDeviceListener.class。
  • 这个类呢。是设备回调云端该设备所有信息的一个重要类。

  • 方法以及说明如下:


    • didGetHardwareInfo:设备硬件信息的回调。

    • didSetCustomInfo:设置设备绑定信息的回调。

    • didExitProductionTesting:设备退出产测的回调

    • didSetSubscribe:设备订阅或解除订阅的回调。

    • didUpdateNetStatus:设备网络状态变化通知。

    • didReceiveData:接收到设备状态上报的回调。


  • 于是乎,我们可以这样做当你做好了发送指令到云端,就敲以下代码,可以实现监听:


    • 注意 : 当发送指令到云端时候,从didReceiveData( )方法返回来的ConcurrentHashMap对象肯定是为null,只有当设备自己发出心跳并通过云端发送数据到这里ConcurrentHashMap对象才不为空!切记切记!

    • 所以… … 我们必须先判断ConcurrentHashMap对象是否为null ,否则会报空指针,接下来的操作就麻烦了。


  • 如下所示,iswater 和 open_off 是布尔值类型的数据点。我们先判断data是否为空,再做其他操作!


  1. private GizWifiDeviceListener listener = new GizWifiDeviceListener() {

  2.         @Override
  3.         public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {
  4.             super.didReceiveData(result, device, dataMap, sn);
  5.             //先判断是否为正确回调
  6.             if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
  7.                 //首先从回调的数据中判断这个回调设备是否为当前界面的设备,通过唯一的mac地址
  8.                 if (device.getMacAddress().equals(mDevice.getMacAddress())) {
  9.                   //判断dataMap是否为null
  10.                     if (dataMap.get("data") != null) {
  11.                         ConcurrentHashMap<String, Object> mtempData = (ConcurrentHashMap<String, Object>) dataMap.get("data");
  12.                         if (mtempData.get("iswater") != null) {
  13.                             iswater = (boolean) mtempData.get("iswater");
  14.                         }
  15.                         if (mtempData.get("open_off") != null) {
  16.                             open_off = (boolean) mtempData.get("open_off");
  17.                         }
  18.                         mHandler.sendEmptyMessage(101);
  19.                     }
  20.                 }
  21.             }
  22.         }
  23. };


2、 比如可以这样子做,实现回调和UI交互。
  • 如下所示,现在全局变量声明一个 弹窗 ProgressDialog 对象。当有数据回调时候,就把它显示出来,当回调回来码为正确的话(表示正确回调)就会把这个弹窗关闭,否则没有回调表示没有成功的话,一直在转。
  1. //弹窗
  2.     private ProgressDialog mProgressDialog ;

  3.     private GizWifiDeviceListener listener = new GizWifiDeviceListener() {
  4.         @Override
  5.         public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {
  6.             super.didReceiveData(result, device, dataMap, sn);
  7.             mProgressDialog =new ProgressDialog(GosDeviceControlActivity.this);
  8.             mProgressDialog.setTitle("正在同步云端数据!");
  9.             //弹窗设置不可点击
  10.             mProgressDialog.setCancelable(false);
  11.             //显示弹窗
  12.             mProgressDialog.show();
  13.             //先判断是否为正确回调
  14.             if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
  15.                 //关闭弹窗
  16.                 mProgressDialog.dismiss();
  17.                 //首先从回调的数据中判断这个回调设备是否为当前界面的设备,通过唯一的mac地址
  18.                 if (device.getMacAddress().equals(mDevice.getMacAddress())) {
  19.                     if (dataMap.get("data") != null) {
  20.                         ConcurrentHashMap<String, Object> mtempData = (ConcurrentHashMap<String, Object>) dataMap.get("data");
  21.                         if (mtempData.get("iswater") != null) {
  22.                             iswater = (boolean) mtempData.get("iswater");
  23.                         }
  24.                         if (mtempData.get("open_off") != null) {
  25.                             open_off = (boolean) mtempData.get("open_off");
  26.                         }
  27.                         mHandler.sendEmptyMessage(101);
  28.                     }
  29.                 }
  30.             }
  31.         }
  32.     };

  • 如果回调不成功,表示设备未能正常接受到数据,就这样显示效果啦!一直在转,转不停!
  • 20170720201836798.gif




您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:21ic公开课专区:http://open.21ic.com/ 21ic资料下载中心:http://dl.21ic.com/ 21ic项目外包中心:http://project.21ic.com/ 杰杰欢迎大家有空常来赛事专区逛逛

131

主题

3790

帖子

63

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:21ic公开课专区:http://open.21ic.com/ 21ic资料下载中心:http://dl.21ic.com/ 21ic项目外包中心:http://project.21ic.com/ 杰杰欢迎大家有空常来赛事专区逛逛

131

主题

3790

帖子

63

粉丝
快速回复 在线客服 返回列表 返回顶部