Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java objectID在Observe.onResponse中始终为0_Java_M2m_Leshan - Fatal编程技术网

Java objectID在Observe.onResponse中始终为0

Java objectID在Observe.onResponse中始终为0,java,m2m,leshan,Java,M2m,Leshan,我正在尝试建立一个基于乐山服务器代码的自定义服务器。 我想将从设备接收到的一些数据存储到数据库中。 目前,我正在使用提供的乐山客户端演示作为唯一的客户端,用于测试目的 我的计划是使用ObservationListener.onResponse处理程序听取观察结果 对于这些事件中的每一个,我还需要检索每个资源的名称,以便将它们相应地写入数据库。 为此,我使用server.getModelProvider相关方法 以下是我的处理程序的代码片段: private LeshanServer server

我正在尝试建立一个基于乐山服务器代码的自定义服务器。 我想将从设备接收到的一些数据存储到数据库中。 目前,我正在使用提供的乐山客户端演示作为唯一的客户端,用于测试目的

我的计划是使用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。所以除了第一个对象,资源模型是空的,因为我认为它不匹配任何东西。 我在ObserverResponse中没有看到任何其他相关数据

当我手动将objectId设置为其他值1、2、3、…8时,它就像对应对象的符咒一样工作


我觉得这不正常。这个bug的来源是什么?

我认为res.getContent.getId将返回resourceId,而不是ObjectId。 在我的例子中,我尝试为id为2的资源设置observe,但从getId得到了2。 还有另一种获取ObjectId的方法是obs.getPath,通过这种方法,您将获得包含ObjectId、InstanceId和ResourceId的LwM2mPath