-1

タイマーからこの関数を呼び出すと、バインドされた例外の配列をスローしようとするのはなぜですか。

このクエリを解決するにはどうすればよいですか。このコードは、run 関数の間で呼び出されます。list<Address> addresses範囲外の配列例外です。このクエリを解決する方法を教えてください

public String get_address(double latitude ,double longitude)
{
    String address = null;

    if(Geocoder.isPresent())
    {
        try{
            Geocoder geocoder2 = new Geocoder(mContext, Locale.getDefault());
              List<Address> addresses;
              addresses = geocoder2.getFromLocation(latitude, longitude, 2);
               if(addresses != null) {
                     Address returnedAddress = addresses.get(0);

                     StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
                     for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                     strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
                    }
                     /*if(returnedAddress.getMaxAddressLineIndex() > 0){
                         strReturnedAddress.append(returnedAddress.getAddressLine(0) + ", ");
                       }

                       strReturnedAddress.append(returnedAddress.getLocality() + ", ");
                       strReturnedAddress.append(returnedAddress.getCountryName());
                     */

                     address=strReturnedAddress.toString();
                     }
                     else{
                     address="No Address returned!";
                     }
               //return address;

        }
        catch(Exception e)
        {
            Log.e("MyAPP", "Reverse geo lookup failed", e);
                address="reverse geo look up failed";
             //return address;
        }

    }
    else
    {
        address="Geocoder is not present";
        //return address;
    }
    return address;
}
4

3 に答える 3

1

addresses空にすることができます(nullとは異なりますが、最初のアイテムを取得できません)

if(addresses != null)に置き換えるif(addresses != null && !addresses.isEmpty())

于 2013-02-11T10:33:11.257 に答える
0

ドキュメントから:

Address オブジェクトのリストを返します。一致するものが見つからない場合、または利用可能なバックエンド サービスがない場合は、null または空のリストを返します。

そのため、オブジェクトが 0 個の新しい ArrayList が返されます。次の方法で確認する必要があります。

if(addresses != null && addresses.size() > 0) {
于 2013-02-11T10:33:57.173 に答える
0

アドレスリストは初期化されているため、空である可能性がありますが、null ではありません。

if(addresses != null && !adresses.isEmpty())
于 2013-02-11T10:34:34.963 に答える