本帖最后由 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);
}
}
}
};
|