欢迎来到物联网平台机智云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