0

逆ジオコーディング(数字からテキストへの場所の転送)を行うAndroidサイトからコードを取得します

正常に動作していますが、アプリケーションが少し変更されたため、このコードを通常のメソッドに変更する必要があります。現在はAsyncTaskです。Locationを取得し、文字列を返す必要があります。

このコードは私には少し奇妙なので、私はあなたの助けが必要です:

private class ReverseGeocodingTask extends AsyncTask<Location, Void, Void> 
{
    Context mContext;

    public ReverseGeocodingTask(Context context) 
    {
        super();
        mContext = context;
    }

    @Override
    protected Void doInBackground(Location... params) 
    {
        Geocoder geocoder = new Geocoder(mContext, Locale.getDefault());

        Location loc = params[0];
        List<Address> addresses = null;
        try {
            addresses = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);
        } catch (IOException e) {
            e.printStackTrace();
            // Update address field with the exception.
            LocationService.this.address = e.toString();
        }
        if (addresses != null && addresses.size() > 0) 
        {
            Address address = addresses.get(0);
            // Format the first line of address (if available), city, and country name.
            String addressText = String.format("%s, %s, %s",
                    address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "",
                    address.getLocality(),
                    address.getCountryName());
            // Update address field on UI.
           // Message.obtain(mHandler, UPDATE_ADDRESS, addressText).sendToTarget();
            LocationService.this.address = addressText;
        }
        return null;
    }
}
4

1 に答える 1

1

あなたはそのような方法を作ることから始めます

public String reverseGeocode(Location loc) {


}

使用されている唯一の場所である最初の場所を取得する行を変更し、それを削除します-既に loc があります

//Location loc = params[0];

次に、アドレスをそのロケーション サービスに設定する代わりに、それを返します。

//LocationService.this.address = addressText;
return addressText;

それらをメソッドにつなぎ合わせ、最後にある不要な return ステートメントを削除すれば、完璧です。

よく見ると、このメソッド内で処理するのではなく、単にチェーンをスローしたい例外も見られます。ケースバイケースでメソッドを呼び出すものによって処理されます。このメソッドが解決できる問題ではありません。

于 2013-01-23T21:32:01.190 に答える