Observe.onResponse 中的 objectID 始终为 0
objectID is always 0 in Observe.onResponse
我正在尝试根据乐山服务器代码设置自定义服务器。
我想将从设备接收到的一些数据存储到数据库中。
目前我使用提供的 leshan-client-demo 作为唯一的客户端,用于测试目的。
我的计划是使用 ObservationListener.onResponse 处理程序来听取观察响应。
对于这些事件中的每一个,我还需要检索每个资源的名称以将它们相应地写入我的数据库。
为此,我使用 server.getModelProvider 相关方法。
这是我的处理程序的代码片段:
private LeshanServer server;
private ObservationListener obsListener = new ObservationListener() {
public void onResponse(Observation obs, Registration reg, ObserveResponse res) {
LwM2mObjectInstance content = (LwM2mObjectInstance) res.getContent();
int objectId = content.getId(); // Here I retrieve the object ID, but it's always 0
LwM2mModel objectModel = server.getModelProvider().getObjectModel(reg);
for (Map.Entry<Integer, LwM2mResource> r : content.getResources().entrySet()) {
int resId = r.getValue().getId(); // This one is okay
ResourceModel model = objectModel.getResourceModel(objectId, resId); // and here I'm trying to use it
if (model != null) {
System.out.println(model.name);
}
}
}
// Other handlers next...
}
问题是正确检索对象 ID。
在这里,我的 objectId 始终为 0。因此,除了第一个对象外,资源模型为空(因为我认为它不匹配任何东西)。
我在 ObserveResponse 中没有看到任何其他相关数据。
当我手动将 objectId 设置为其他值(1、2、3、...8)时,它对相应的对象来说就像一个魅力。
我觉得不正常。此错误的来源可能是什么?
我认为 res().getContent().getId() 将 return resourceId,而不是 ObjectId。
在我的例子中,我尝试为 ID 为 2 的资源设置观察,我从 getId() 得到了 2。
还有另一种获取ObjectId的方法是obs.getPath(),这样你会得到包含ObjectId、InstanceId和ResourceId的LwM2mPath。
我正在尝试根据乐山服务器代码设置自定义服务器。 我想将从设备接收到的一些数据存储到数据库中。 目前我使用提供的 leshan-client-demo 作为唯一的客户端,用于测试目的。
我的计划是使用 ObservationListener.onResponse 处理程序来听取观察响应。
对于这些事件中的每一个,我还需要检索每个资源的名称以将它们相应地写入我的数据库。 为此,我使用 server.getModelProvider 相关方法。
这是我的处理程序的代码片段:
private LeshanServer server;
private ObservationListener obsListener = new ObservationListener() {
public void onResponse(Observation obs, Registration reg, ObserveResponse res) {
LwM2mObjectInstance content = (LwM2mObjectInstance) res.getContent();
int objectId = content.getId(); // Here I retrieve the object ID, but it's always 0
LwM2mModel objectModel = server.getModelProvider().getObjectModel(reg);
for (Map.Entry<Integer, LwM2mResource> r : content.getResources().entrySet()) {
int resId = r.getValue().getId(); // This one is okay
ResourceModel model = objectModel.getResourceModel(objectId, resId); // and here I'm trying to use it
if (model != null) {
System.out.println(model.name);
}
}
}
// Other handlers next...
}
问题是正确检索对象 ID。 在这里,我的 objectId 始终为 0。因此,除了第一个对象外,资源模型为空(因为我认为它不匹配任何东西)。 我在 ObserveResponse 中没有看到任何其他相关数据。
当我手动将 objectId 设置为其他值(1、2、3、...8)时,它对相应的对象来说就像一个魅力。
我觉得不正常。此错误的来源可能是什么?
我认为 res().getContent().getId() 将 return resourceId,而不是 ObjectId。 在我的例子中,我尝试为 ID 为 2 的资源设置观察,我从 getId() 得到了 2。 还有另一种获取ObjectId的方法是obs.getPath(),这样你会得到包含ObjectId、InstanceId和ResourceId的LwM2mPath。