【已解决】 安卓获取阿里云物模型数据,使用官方提供的SDK测试不成功
目前我做的项目就是从阿里云上的物模型上拿传感器的温湿度信息,目前是有几种实现方式的(我想采用第三种方式):
(1)通过MQTT协议,阿里云也提供了自己的SDK,网上例程比较多,但是这种是把安卓端也作为一个节点了;
(2)通过阿里云的服务器订阅功能,就是自己不用查询,平台获取到数据之后,通过HTTP2协议订阅设备端信息,然后通过SDK api接口发布消息,
给设备端订阅。这个时候其实把安卓端作为一个服务器了,我感觉是一种被动的消息接收方式(实时性会好一点)。
(3)第3种是安卓端完全按照应用层观念开发,就是通过阿里云物联网模型数据SDK的api主动查询,然后抓取包含温湿度信息的json包,然后在安卓端解析,我目前的问题是安卓机连接不上阿里云平台的物模型,我确实跟他提供的SDK的例程做的,但是一直连不上,不知道有没有人做过阿里云的物联网模型数据读取,想请教一下,有偿。(这个SDK在使用时出现问题,始终连不上我的设备)
阿里云物联网平台提供的api网址如下:https://help.aliyun.com/document_detail/386373.html
下面是官网的例程:
PubRequest request = new PubRequest()
.setIotInstanceId("${iotInstanceId}")
.setProductKey("${productKey}")
.setMessageContent(Base64.getEncoder().encodeToString("hello world".getBytes()))
.setTopicFullName("/${productKey}/${deviceName}/user/get")
.setQos(0);//目前支持QoS0和QoS1。
try {
PubResponse response = client.pub(request);
// response中包含服务端响应的body和headers。
//获取本次调用requestId。
System.out.println(response.getBody().getRequestId());
//调用是否成功。
System.out.println(response.getBody().getSuccess());
//调用成功。
if (response.getBody().getSuccess()) {
//获取云端消息ID。
System.out.println(response.getBody().getMessageId());
//do业务逻辑。
} else {
//调用失败。
//获取调用失败错误码。
System.out.println(response.getBody().getCode());
//获取调用失败错误描述。
System.out.println(response.getBody().getErrorMessage());
}
} catch (TeaException error) {
//服务端业务异常。
System.out.println(error.getCode());
System.out.println(error.getMessage());
} catch (Exception e) {
//其他运行时异常。
e.printStackTrace();
}
下面是我的程序:
package com.example.realdesigner;
import com.aliyun.iot20180120.Client;
import com.aliyun.iot20180120.models.PubRequest;
import com.aliyun.iot20180120.models.PubResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Demo {
private static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
config.accessKeyId = accessKeyId;
config.accessKeySecret = accessKeySecret;
// 您的可用区ID。
config.regionId = "cn-shanghai";
return new Client(config);
}
public void testAndroid() {
try {
Client client = createClient("LTAITBB0F5JldNYc", "f0YN591f1Nn36N5M4Txsez16hgmrgs");
PubRequest request = new PubRequest()
.setProductKey("a1R9RyOZhQ9")
.setTopicFullName("/a1R9RyOZhQ9/DHT11/user/get")
.setQos(0);
System.out.println("正在连接2");
PubResponse response = client.pub(request);
System.out.println(response);
System.out.println("正在连接");
//调用成功
if (response.getBody().getSuccess()) {
//获取云端消息ID
System.out.println("成功调用");
//do业务逻辑,获取json脚本
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
谢谢大家,问题已经解决,是这样子的:
(1)我之前传感器数据上传至阿里云平台,用的是模拟在线调试,问题解决的情况是采用真实的数据上传;
(2)之前自己的网络权限似乎没开(我个人的问题)
然后还是调用阿里云SDK中的api,特别给大家安利的一个工具是阿里云的openapi自动调试工具,当自己不知道使用什么api时,可在线查看运行结果。
Demo有没有跑起来?跑起来之后报了什么错?放代码对我们这些没接入相关SDK的人没用,放堆栈可能还能帮你看一下
日志呢?走到哪一步了?
我们基本上没用过这个玩意的,没法直接给帮助,最简单方式就是在他们平台提工单资源。