entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Android; Calculo de distancia entre dos puntos

Hola.

Una cosa que parece sencilla me esta dando problemas y no encuentro el fallo. Lo único que quiero es calcular la distancia entre dos puntos (Uno de ellos es mi posición).

Este es el código dentro del método onInfoWindowClick.

                double distance;
        LatLng point = new LatLng(43.318703, -1.927353);
        instLoc.setLatitude(point.latitude);
        instLoc.setLongitude(point.longitude);

                //loc es un obejto de tipo Location que guarda mi posición          
        distance = (int)loc.distanceTo(instLoc);

Este es el error:

12-27 17:47:50.890: W/dalvikvm(20301): threadid=1: thread exiting with uncaught exception (group=0x4185fba8)
12-27 17:47:50.890: E/AndroidRuntime(20301): FATAL EXCEPTION: main
12-27 17:47:50.890: E/AndroidRuntime(20301): Process: com.kirolm.myapp, PID: 20301
12-27 17:47:50.890: E/AndroidRuntime(20301): java.lang.NullPointerException
12-27 17:47:50.890: E/AndroidRuntime(20301):    at com.kirolm.myapp.maps.MapActivity.onInfoWindowClick(MapActivity.java:327)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at com.google.android.gms.maps.GoogleMap$7.e(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at com.google.android.gms.internal.co$a.onTransact(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at android.os.Binder.transact(Binder.java:361)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at cmt.a(SourceFile:82)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at maps.af.bj.b(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at maps.ao.o.W_(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at maps.ao.o.a(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at maps.ao.an.b(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at maps.ao.bc.onSingleTapConfirmed(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at maps.br.g.onSingleTapConfirmed(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at maps.br.i.handleMessage(Unknown Source)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at android.os.Handler.dispatchMessage(Handler.java:102)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at android.os.Looper.loop(Looper.java:136)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at android.app.ActivityThread.main(ActivityThread.java:5017)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at java.lang.reflect.Method.invokeNative(Native Method)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at java.lang.reflect.Method.invoke(Method.java:515)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-27 17:47:50.890: E/AndroidRuntime(20301):    at dalvik.system.NativeStart.main(Native Method)

Haber si se os ocurre algo. Tengo la sensación de que se me pasa algo muy sencillo peor no caigo.

Saludos y gracias

0voto

Leonardo-Tadei comentado

De que tipo son: instLoc, point y loc ???

0voto

humberto_garcia_caba comentado

Si puedieses poner algo más del código sería genial. Cómo inicializas los valores, los tipos exactos que usas, etc. ¿Cuál es la línea 327 de MapActivity exactamente? ya que ahí es donde se produce el null pointer.

Saludos.

0voto

egoitz_gonzalez comentado

Disculpad. tenéis razón. He puesto poca información.

    double distance;
    private Location loc;
    private Location instLoc = new Location("punto1");
    .....
    .......
    ..........
    @Override
    public void onInfoWindowClick(Marker marker) {
            double distance;
            LatLng point = new LatLng(43.318703, -1.927353);
            instLoc.setLatitude(point.latitude);
            instLoc.setLongitude(point.longitude);

            //loc es un obejto de tipo Location que guarda mi posición          
            distance = loc.distanceTo(instLoc);
}

La linea 327 es la siguiente:

distance = loc.distanceTo(instLoc);

Gracias por la ayuda

0voto

egoitz_gonzalez comentado

Hola.

Decubri que el erro es debido a que el objeto loc de tipo Location es null dentro de el metodo onInfoWindowClic.

Supuestamente ese obejto lo inicializo en un metodo que he llamado startLocation al cual lo llamo desde el onCreate.

Este es el código del método.

public void startLocation(){
    //Obetnemos una referencia al LocaionManager
    LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    //Obetenemos la última posición conocida (Despues tendremos que actualizar)
    Location loc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    //Mostramos la última posición conocida (Puede ser null, ya que tal vez nuca se halla activado el GPS en el dispositivo)
    mostrarPosicion(loc);
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0,this);
    locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 5, this);

}

1 Respuesta

0voto

Leonardo-Tadei Puntos227320

Hola Egoitz,

tenés un problema de ámbito (visibilidad) de las variables.

Para que la instancia loc de clase Location esté disponible en otros métodos, o bien tenés que pasarla como mensaje (parámetro) o tenés que definirla como un atributo de la clase usarla referenciándola con this en todo lugar en que la uses:

...
this.loc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
...

Saludos!

0voto

egoitz_gonzalez comentado

Gracias.

Ese era el error. Sabía que era algo simple y básico pero no caía.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta