Android Geocoder getFromLocationName всегда возвращает null

Я пытаюсь геокодировать строку для получения координат, но моя программа всегда сбой, потому что когда я пытаюсь использовать getFromLocationName(), она возвращает null. Я пытался исправить это часами, но ничего не работает. Вот мой код

public class MainActivity extends Activity {

    private GoogleMap mMap;

    List<Address> addresses;
    MarkerOptions miami;
    String myLocation = "Miami,Florida";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (mMap == null) {
            mMap = ((MapFragment) getFragmentManager().findFragmentById(
                    R.id.map)).getMap();
        }

        if (mMap != null) {

            Geocoder geocoder = new Geocoder(this);


            double latitude = 0;
            double longitude = 0;

            while(addresses==null){
            try {
                addresses = geocoder.getFromLocationName(myLocation, 1);

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
            Address address = addresses.get(0);
            if (addresses.size() > 0) {
                latitude = address.getLatitude();
                longitude = address.getLongitude();
            }
            LatLng City = new LatLng(latitude, longitude);

            miami = new MarkerOptions().position(City).title("Miami");

            mMap.addMarker(miami);

            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(City, 15));

        }
}

Ответ 1

Геокодер не всегда возвращает значение. Вы можете попробовать отправить запрос 3 раза в цикл for. Я должен был бы вернуться хотя бы один раз. Если нет, то это может быть проблема подключения или могут быть другие проблемы, такие как сервер, не отвечающий на ваш запрос. Попробуйте посмотреть эти темы:

Геокодер не всегда возвращает значение и geocoder.getFromLocationName возвращает только null

Обновлено:

У меня был цикл while, но я использовал его максимум 10 раз. Иногда он никогда ничего не возвращал, даже если он был подключен к интернету. Затем я использовал этот более надежный способ получить адрес каждый раз:

public JSONObject getLocationInfo() {

        HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true");
        HttpClient client = new DefaultHttpClient();
        HttpResponse response;
        StringBuilder stringBuilder = new StringBuilder();

        try {
            response = client.execute(httpGet);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
            } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = new JSONObject(stringBuilder.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

Я назвал его следующим:

JSONObject ret = getLocationInfo(); 
JSONObject location;
String location_string;
try {
    location = ret.getJSONArray("results").getJSONObject(0);
    location_string = location.getString("formatted_address");
    Log.d("test", "formattted address:" + location_string);
} catch (JSONException e1) {
    e1.printStackTrace();

}

Надеюсь, это поможет. Я тоже устал полагаться на геокодер. Это сработало для меня. Если вы замените URL координатами lat и longitude и увидите возвращаемый объект JSON в веб-браузере. Вы увидите, что только что произошло.