打印

【我是个快乐的搬运工连载系列⑤】之分析怎么样把云端...

[复制链接]
689|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TE, ce, ge, ic, ST
本帖最后由 caijie001 于 2018-3-1 15:53 编辑

注:本帖为转载系列,征得“半颗心脏”博主(我老乡)的同意。哎呀,老家人才还是蛮多的

原贴地址:第一篇:认识开源框架结构,导入PK、APP的id和secret。
                 第二篇:详细分析在设备列表的代码块,如何修改自定义的设备图片。
                 第三篇 : 分析设备详情界面的中如何发送各种指令到云端:boolean、int、String类型。
                 第四篇 : 分析怎么做好自己的指令是否成功发送到云端对应的逻辑处理                   

         第五篇 : 分析怎么样把云端设备的信息状态同步到手机显示。


1、 认识无所不在的类 Gi1 、何等重要的一个类 GizWifiDeviceListener.class ()。
  • 如果你从头到尾认真的看了系列教材,相信学习本章内容你不会吃力。因为我们从云端设备信息状态同步也是通过这个类 GizWifiDeviceListener.class的。其重要的回调方法在上个章节可以详细了解。

  • 那本章节我以问题回答形式来讲解如何把数据处理并显示出来!

  • 问题 一:怎么从云端获取到数据呢?设备上报数据,会发送到手机吗?
  • 答: 同样地,我们在做上图看到“GizWifiDevice 类提供的所有回调接口”,这句话其实我本人怀疑是打错了!应该是“GizWifiDeviceListener”,于是我们就知道我们是也是从这个类获取数据的,每当设备上报数据,云端都是会通过此来回报给APP。
  • 问题 二:既然也是从GizWifiDeviceListener类的获取数据,那获取到的数据是什么格式呢?
    答: 同样地,这里我肯定和大家说。这是获取的是JSON数据格式,如下,data是最里面的一个键,然后对应里面的就是我们所定义的数据点了,比如 “waterprogress”就是我定义的一个 int类型的数据点,”open_off” 和 “iswater”都是布尔类型的数值点,其后面的表示该值。

     {   data = {  waterprogress=153 , open_off=false , iswater=true}  }

  • 问题 三:既然从云端获取到数据,那应该怎么剖析?
  try {
            JSONObject jsonObject1 = new JSONObject(map);
                //解析boolean类型
               boolean iswater= jsonObject1.getBoolean("iswater");
                //解析 int类型
              int  progress= jsonObject1.getInt("waterprogress");
                //解析 String类型
              String  num= jsonObject1.getString("num");

            } catch (JSONException e) {
                e.printStackTrace();
            }


  • 问题四:既然从云端获取到数据,那应该怎么显示呢?
    答: 上面已经可以获取到数据了 ! 记得别拿到了数据立刻显示出来!通过 Handler机制显示出来哦!否则会阻塞线程,说不定会闪退APP呢!如图:

private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //更新UI
            if (msg.what == 101) {
                if (iswater) {
                    iv_show.setBackgroundResource(R.drawable.ic_openlight);
                } else {
                    iv_show.setBackgroundResource(R.drawable.ic_offlight);
                }
                if (open_off) {
                    tv_show.setText("有水啦!");
                    tv_show.setTextColor(getResources().getColor(R.color.black));
                } else {
                    tv_show.setText("无水!");
                    tv_show.setTextColor(getResources().getColor(R.color.tomato));
                }
            }
        }
    };

  private GizWifiDeviceListener mGizWifiDeviceListener = new GizWifiDeviceListener() {
        @Override
        public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {
            super.didReceiveData(result, device, dataMap, sn);
            if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
                if (dataMap.get("data") != null) {
                  ConcurrentHashMap<String, Object> map = (ConcurrentHashMap<String, Object>) dataMap.get("data");
                    isHaveWater = (boolean) map.get("Infrared");
                    isOpen= (boolean) map.get("open");
                    waterProgress = (Integer) map.get("waterprogress");
                    mHandler.sendEmptyMessage(UPDATALIST);
                }
            }
        }
    };








相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

131

主题

3790

帖子

63

粉丝