2017-10-19 3 views
-2

私はこの機能があります。私にはそれはnullを意味し、どのアンドロイド - Collections.sort - java.lang.NullPointerExceptionが

if (o2.getAddress() == null) { 
    return 0; 
} 

:何らかの理由で

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; 
      } 

     } 
    }); 

は、私が上でNPEを得続けます何とか配列に配置されました。誰もこれまでにこれまでに遭遇した?

+0

にコードを変更 'addressables'はすでに' null'なのでが含まれています。そこにチェックしてください。 – Henry

+0

ヌルが有効なリスト値です – Mike

+1

シーケンスにヌル要素が含まれている理由を調べ、_that_問題を修正してください。シーケンスにnull要素が含まれていても例外的な例外でない場合は、 'Comparator'を' Comparator.nullsFirst'または 'Comparator.nullsLast'(Java 8以降を前提とします)でラップすることができます。 'Comparator'の実装はnull値をサポートする必要はないことに注意してください。そういう場合は、前述のラッパーのいずれかを使用する必要があります。 –

答えて

1

つまり、o2リファレンスを確認する必要があります。 nullの可能性があります。 o2.getAddressからアドレスを取得する前に、最初にo2 == nullをチェックしてください。

1

はい、配列リストにnull要素を含めることができます。

はこれを試してみてください:

だから、
final ArrayList<Object> list = new ArrayList<Object>(); 
list.add(null); 

、あなたは常に有効なオブジェクトを持っていることを保証できない場合、

if (o2 == null || o2.getAddress() == null) { 
    return 0; 
} 
関連する問題