J'ai cette fonction:Android - Collections.sort - java.lang.NullPointerException
final ArrayList<Addressable> tempStoreList = new ArrayList<>();
tempStoreList.addAll(addressables);
Collections.sort(tempStoreList, new Comparator<Addressable>() {
@Override
public int compare(Addressable o1, Addressable o2) {
double distanceToO1 = 0;
double distanceToO2 = 0;
if (o1.getAddress() == null) {
return (o2.getAddress() == null) ? 0 : -1;
}
if (o2.getAddress() == null) {
return 0;
}
if (userLocation != null && o1.getAddress() != null && o2.getAddress() != null) {
distanceToO1 = GlobalUtilities.distance(userLocation, o1.getAddress().getLocation(), "K");
distanceToO2 = GlobalUtilities.distance(userLocation, o2.getAddress().getLocation(), "K");
}
if (distanceToO1 < distanceToO2) {
return -1;
} else if (distanceToO1 > distanceToO2) {
return 1;
} else {
return 0;
}
}
});
Pour une raison quelconque, je continue à obtenir un NPE sur:
if (o2.getAddress() == null) {
return 0;
}
Ce qui me signifie que nulle était en quelque sorte placé dans le tableau. Quelqu'un a déjà rencontré ça avant?
'addressables' contient déjà le' null'. Vérifiez là. – Henry
Null est une valeur de liste valide – Mike
Découvrez pourquoi votre séquence contient un élément null et corrige le problème _that_. Pour les cas où il n'est pas exceptionnel qu'une séquence contienne des éléments NULL, vous pouvez envelopper votre Comparator avec Comparator.nullsFirst ou Comparator.nullsLast (en supposant Java 8 ou plus récent). Notez que les implémentations 'Comparator' ne sont pas requises pour prendre en charge les valeurs nulles, donc si c'est quelque chose que vous voulez gérer, vous devriez utiliser l'un des wrappers précités. –