Уникален идентификатор на маяк за контакт понякога е нула

Наскоро започнах да играя с няколко маяка на 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);
           }
        }    
  }

Докато отстранявах грешки, забелязах, че понякога uniqueId е нула. Ето защо проверявам дали е нула, но пак ми се струва много странно. Това често ли е или има грешка в моя код? И как мога уникално да идентифицирам маяк, ако името е нула?


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, но този път предполагам, че беше необходимост. UniqueId е част от рекламния пакет на маяк и следователно Android API го чете от масива от байтове, които получава, когато получи рекламата на маяк. Предполагам, че е възможно рекламата, която устройството получава, да не е пълна поради смущения в сигнала, но по-скоро съм сигурен. Ще запазя въпроса отворен, в случай че някой експерт по маяци го види и има отговор. - person itd; 26.07.2015