He estado tratando de geocodificar una cadena para obtener sus coordenadas, pero mi programa siempre se bloquea porque cada vez que intento usar getFromLocationName() devuelve null. He estado tratando de arreglar esto durante horas, pero nada de trabajo. Aquí está mi código

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));

        }
}
nadie va a contestar esta pregunta por favor?

OriginalEl autor anishk25 | 2013-03-03

1 Comentario

  1. 23

    Geocoder no siempre devuelven un valor. Usted puede tratar de enviar una solicitud de 3 veces en un bucle for. Yo debería ser capaz de volver al menos una vez. Si no, entonces, su podría ser un problema de conexión o pueden ser otros temas como el servidor de dis no responder a su solicitud. Probar y ver estos hilos:

    Geocoder no siempre devuelven un valor y geocoder.getFromLocationName sólo devuelve null

    Actualizado:

    Tuve un bucle while así, pero yo solía tratar máximo de 10 veces. A veces, nunca devuelve nada, ni siquiera si estaba conectado t a internet. Entonces, he utilizado este mucho más fiable para obtener la dirección cada vez:

    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;
        }

    Me llamó la siguiente manera:

    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();
    
    }

    Espero que esto ayude. Yo también estaba cansado de confiar en geocoder. Esto funcionó para mí.
    Si se reemplaza la URL con el lat y coordenadas de longitud y ver los devuelve un objeto JSON en un navegador web. Vas a ver lo que acaba de suceder.

    pero tengo un bucle while para asegurarse de que obtener un valor de geocoder, y se mantiene en bucle para siempre.
    Ver mi respuesta actualizada. Espero que resuelve lo que usted está tratando de lograr.
    Me hago la misma problem. Y me enteré de que la NetworkLocator en el dispositivo ha dejado de funcionar o asesinados por alguna razón(no en nuestras manos). En realidad se puede confirmar esta re-arranque de su dispositivo. Se debe trabajar ahora(desde NetworkLocator re-boots too).
    Hay 3 casos. 1. usted no va a obtener la ubicación 1ª vez, a continuación, intenta bucle y conseguir que la 4ta/5ta tiempo, etc.., 2. No importa cómo muchas veces usted bucle, usted no obtendrá ningún detalles de la ubicación, por lo que supone la esté temporalmente fuera de servicio e ir con la solución anterior, 3. Como he explicado en el comentario de arriba, nunca va a funcionar a menos que reinicie el dispositivo, lo que significa que siempre va a ir por paso 1 y paso 2, que podría tomar alrededor de 2-5 segundos cada vez. Nadie quiere esperar mucho tiempo para conseguir una sola datos como addressline. Mejor solución para el caso-3?
    Ver algo liek stackoverflow.com/questions/15711499/…

    OriginalEl autor Shobhit Puri

Dejar respuesta

Please enter your comment!
Please enter your name here