0

私のアプリでは、特定の場所が特定のエリアに含まれるかどうかを確認する必要があります。ニューデリーのコンノートプレイスを中心にしています。中心点から200マイルのエリアにあるアドレスを取得しました。しかし、「abcdfdfkc」などの無効な場所を入力すると、この場所の座標を見つけようとしているため、アプリがクラッシュします。これは避けたいと思います。

以下にコードを投稿しています:

public static  boolean isServicedLocation(Context _ctx, String strAddress){
    boolean isServicedLocation = false;

    Address sourceAddress = getAddress(_ctx, "Connaught Place, New Delhi, India");
    Location sourceLocation = new Location("");
    sourceLocation.setLatitude(sourceAddress.getLatitude());
    sourceLocation.setLongitude(sourceAddress.getLongitude());      

    Address targetAddress = getAddress(_ctx, strAddress);
    Location targetLocation = new Location("");

    if (targetLocation != null) {
        targetLocation.setLatitude(targetAddress.getLatitude());
        targetLocation.setLongitude(targetAddress.getLongitude());
        float distance = Math.abs(sourceLocation.distanceTo(targetLocation));
        double distanceMiles = distance/1609.34;
        isServicedLocation = distanceMiles <= 200;

        //Toast.makeText(_ctx, "Distance "+distanceMiles, Toast.LENGTH_LONG).show();
    }       

    return isServicedLocation;
}

getAddressメソッド:

public static Address getAddress(Context _ctx, String addressStr) {
    Geocoder geoCoder = new Geocoder(_ctx, Locale.getDefault());
    try {
        List<Address> addresses = geoCoder.getFromLocationName(addressStr,
                1);

        if (addresses.size() != 0) {
            return addresses.get(0);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return null;
}
4

1 に答える 1

1

これは、GeoCoderからアドレスが見つからない場合(つまり、if addresses.size() == 0)、を返すためnullです。

次に、それとは関係なく、値を逆参照します。これがアプリのクラッシュの原因です。

Address targetAddress = getAddress(_ctx, strAddress);
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:
if (targetLocation != null) {
    targetLocation.setLatitude(targetAddress.getLatitude());
                               ^^^^^^^^^^^^^

おそらく、これを回避するtargetAddressためにチェックする必要がありますnull(のチェックに加えて(可能性が高い)、またはその代わりに(可能性が低い)targetLocation)。

だから私は変化することを考えているでしょう:

if (targetLocation != null) {

の中へ:

if ((targetLocation != null) && (targetAddress != null)) {

そうすれば、無効なアドレスは自動的にサービスされていない場所になります。

于 2012-09-11T03:01:19.510 に答える