objectID всегда равен 0 в Observe.onResponse
Я пытаюсь настроить пользовательский сервер на основе кода Leshan-сервера. Я хочу сохранить некоторые данные, полученные от устройств, в базу данных. В настоящее время я использую предоставленную демо-версию leshan-client в качестве единственного клиента для тестирования.
Мой план состоит в том, чтобы прослушивать ответы наблюдателей с помощью обработчика 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...
}
Проблема заключается в том, чтобы правильно получить идентификатор объекта. Здесь мой objectId всегда равен 0. Таким образом, за исключением первого объекта, модель ресурса равна нулю (как я полагаю, она ничего не соответствует). Я не вижу никаких других соответствующих данных в ObserveResponse.
Когда я вручную устанавливаю objectId в другие значения (1, 2, 3, ...8), он работает как брелок для соответствующего объекта.
Я думаю, что это не нормально. Что может быть источником этой ошибки?
1 ответ
Я думаю, что res (). GetContent (). GetId () вернет resourceId, а не ObjectId. В моем случае я попытался установить наблюдение для ресурса с идентификатором 2, и я получил 2 от getId (). Есть другой способ получить ObjectId, который является obs.getPath (), таким образом, вы получите LwM2mPath, который содержит ObjectId, InstanceId и ResourceId.