Уникальный идентификатор маяка контакта иногда равен нулю

Недавно я начал играть с несколькими маяками Kontakt и своим телефоном Android (LG L30).

Я добавил регион по умолчанию для обнаружения всех маяков:

private static final Region ALL_BEACONS_REGION = Region.EVERYWHERE;

И я инициализировал новый MonitoringListener. Соответствующий код:

    @Override
    public void onBeaconsUpdated(Region region, List<BeaconDevice> list) {
       List<BeaconDevice> beacons = new ArrayList<BeaconDevice>();
       Iterator i = list.iterator();
       while (i.hasNext()){
           BeaconDevice beacon = (BeaconDevice)i.next();
           if(beacon.getUniqueId() != null) {
               beacons.add(beacon);
           }
        }    
  }

Во время отладки я заметил, что иногда уникальный идентификатор равен нулю. Вот почему я проверяю, является ли он нулевым, но все равно нахожу это очень странным. Это распространено или ошибка в моем коде? И как я могу однозначно идентифицировать маяк, если имя равно null?


person itd    schedule 26.07.2015    source источник


Ответы (1)


Хм, чтобы проверить, почему getUniqueId() возвращает NULL, мы должны посмотреть, как вы устанавливаете это значение.

Объект, который вы можете однозначно идентифицировать, используя его hashCode(). Переопределите этот метод в объекте, чтобы сгенерировать нечто уникальное.
см.: переопределение равенства и hashCode в Java

Или, если вы хотите только предотвратить множественные записи в списке, вы можете использовать Set, который не добавляет дубликатов (по сравнению с вашим ArrayList). см.: Java — Set

person Joel Geiser    schedule 26.07.2015
comment
Да, это был бы один из вариантов. - person itd; 26.07.2015
comment
Да, это был бы один из вариантов. Я не люблю заглядывать в исходный код API, но на этот раз, думаю, это было необходимо. Уникальный идентификатор является частью рекламного пакета маяка, поэтому Android API считывает его из массива байтов, который он получает, когда получает рекламу маяка. Я предполагаю, что реклама, которую получает устройство, может быть неполной из-за помех сигнала, но я уверен. Я оставлю вопрос открытым на случай, если эксперт по маякам увидит его и ответит. - person itd; 26.07.2015