6

過去 2 日間IllegalArgumentException、住所から座標を取得しようとしたり、逆に経度と緯度から住所を取得しようとしたりするときに、Android コードでエラーが発生して頭がおかしくなりました。これはコードですが、エラーが表示されません。これは、Google 検索で簡単に見つかる標準的なコード スニペットです。

public GeoPoint determineLatLngFromAddress(Context appContext, String strAddress) {
    Geocoder geocoder = new Geocoder(appContext, Locale.getDefault());
    GeoPoint g = null; 
    try {
        System.out.println("str addres: " + strAddress);
        List<Address> addresses = geocoder.getFromLocationName(strAddress, 5);
        if (addresses.size() > 0) {
            g = new GeoPoint(
               (int) (addresses.get(0).getLatitude() * 1E6),
               (int) (addresses.get(0).getLongitude() * 1E6)
            );
        }
    } catch (Exception e) {
        throw new IllegalArgumentException("locationName == null");
    }
    return g;
 }

これらは、manifest.xml ファイルのアクセス許可です。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

Google API キーも宣言しています。<uses-library android:name="com.google.android.maps" />

上記のコード スニペットから、geocoderis は notnullであり、addressorもありません。appContextここでつまずきます:geocoder.getFromLocationName(strAddress, 5);

私は多くの Google 検索を行いましたが、機能するものは何も見つかりませんでした。私が見つけた最も重要な情報は次のとおりです。

Geocoder クラスには、コア Android フレームワークに含まれていないバックエンド サービスが必要です。

すっごく、私は今混乱しています。これを機能させるには、コードで何を呼び出し、インポート、追加、使用する必要がありますか? 私は Google API 2.2、API レベル 8 を使用しています。誰かがこれに対する解決策やドキュメントへのポインタを見つけた場合、私が発見できなかったものを教えてください。

4

4 に答える 4

14

同様の問題があり、結果が得られるまでGeocoderをポーリングするとうまくいくことがわかりました。これが私がやった方法です。これまでのところうまくいきます。

try {
    List<Address> geoResults = geocoder.getFromLocationName("<address goes here>", 1);
    while (geoResults.size()==0) {
        geoResults = geocoder.getFromLocationName("<address goes here>", 1);
    }
    if (geoResults.size()>0) {
        Address addr = geoResults.get(0);
        myLocation.setLatitude(addr.getLatitude());
        myLocation.setLongitude(addr.getLongitude());
    }
} catch (Exception e) {
    System.out.print(e.getMessage());
}
于 2011-02-09T20:36:55.097 に答える
2
public LatLng determineLatLngFromAddress(Context appContext, String strAddress) {
        LatLng latLng = null;
        Geocoder geocoder = new Geocoder(appContext, Locale.getDefault());
        List<Address> geoResults = null;

        try {
            geoResults = geocoder.getFromLocationName(strAddress, 1);
            while (geoResults.size()==0) {
                geoResults = geocoder.getFromLocationName(strAddress, 1);
            }
            if (geoResults.size()>0) {
                Address addr = geoResults.get(0);
                latLng = new LatLng(addr.getLatitude(),addr.getLongitude());
            }
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }

    return latLng; //LatLng value of address
    }
于 2015-04-17T15:18:32.063 に答える
0

Android 2.0でコードを実行すると、機能します。私はmayコードで同じ問題を抱えていました。2.2では機能しません。理由はわかりません。

于 2010-12-31T04:35:50.380 に答える