博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

欢迎来到物联网平台机智云Android开源框架入门之旅

本套博客系列教程由物联网“非机智云工作人员”发烧友 半颗心脏 潜心所力原创,以下是本系列博客目录:


1、 认识无所不在的类 Gi

1 、何等重要的一个类 GizWifiDeviceListener.class ()。


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

这里写图片描述


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

  • 问题 一:怎么从云端获取到数据呢?设备上报数据,会发送到手机吗?

    答: 同样地,我们在做上图看到“GizWifiDevice 类提供的所有回调接口”,这句话其实我本人怀疑是打错了!应该是“GizWifiDeviceListener”,于是我们就知道我们是也是从这个类获取数据的,每当设备上报数据,云端都是会通过此来回报给APP。


  • 问题 二:既然也是从GizWifiDeviceListener类的获取数据,那获取到的数据是什么格式呢?
    答: 同样地,这里我肯定和大家说。这是获取的是JSON数据格式,如下,data是最里面的一个键,然后对应里面的就是我们所定义的数据点了,比如 “waterprogress”就是我定义的一个 int类型的数据点,”open_off” 和 “iswater”都是布尔类型的数值点,其后面的表示该值。
     {   data = {  waterprogress=153 , open_off=false , iswater=true}  }

  • 问题 三:既然从云端获取到数据,那应该怎么剖析?
    答: 上面提到这是Json数据格式,对于在任何语言下,都是很容易剖析的。比如我们从云端获取到了的数据map,就经过以下的剖析就可以啦!
      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);
                }
            }
        }
    };

  • QQ群:434878850