0

Je travaille sur une application dans laquelle les utilisateurs doivent indiquer leur latitude et leur longitude afin de publier des informations. Le problème est quand j'utilise le code suivant:Pourquoi mon appli se bloque-t-elle lorsque j'essaie d'obtenir les valeurs de latitude et de longitude Android

/******************************************************************** 
* GET LATITUDE              * 
********************************************************************/ 
public String getLatitude(){ 
    LocationManager lm = (LocationManager) ACTIVITY.getSystemService(Context.LOCATION_SERVICE); 

    if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     if(location != null){ 
      return Double.toString(location.getLatitude()); 
     } 
    } 
    return null; 
} 


/******************************************************************** 
* GET LONGITUDE              * 
********************************************************************/ 
public String getLongitude(){ 
    LocationManager lm = (LocationManager) ACTIVITY.getSystemService(Context.LOCATION_SERVICE); 

    if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     if(location != null){ 
      return Double.toString(location.getLongitude()); 
     } 
    } 
    return null; 
} 

Je peux voir les messages d'erreur suivants:

12-06 22:31:46.791: W/dalvikvm(1173): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
12-06 22:31:46.811: E/AndroidRuntime(1173): FATAL EXCEPTION: main 
12-06 22:31:46.811: E/AndroidRuntime(1173): java.lang.IllegalStateException: Could not execute method of the activity 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.view.View$1.onClick(View.java:3044) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.view.View.performClick(View.java:3511) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.view.View$PerformClick.run(View.java:14105) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.os.Handler.handleCallback(Handler.java:605) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.os.Looper.loop(Looper.java:137) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at dalvik.system.NativeStart.main(Native Method) 
12-06 22:31:46.811: E/AndroidRuntime(1173): Caused by: java.lang.reflect.InvocationTargetException 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at android.view.View$1.onClick(View.java:3039) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  ... 11 more 
12-06 22:31:46.811: E/AndroidRuntime(1173): Caused by: java.lang.NullPointerException 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at com.example.cay.saati.Helper.getLatitude(Helper.java:100) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at com.example.cay.saati.MenuPage.prepareLoginInformation(MenuPage.java:230) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  at com.example.cay.saati.MenuPage.onClick(MenuPage.java:267) 
12-06 22:31:46.811: E/AndroidRuntime(1173):  ... 14 more 

J'utilise les autorisations suivantes pour utiliser LocationManager:

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

Et aussi bibliothèque:

<uses-library android:name="com.google.android.maps" /> 

Quelqu'un peut-il me dire quel est le problème exact? Qu'est-ce qui cause java.lang.reflect.invocationTargetException? Je ne comprends pas. Merci!

+1

Le véritable problème est une exception NullPointerException. – keyser

+0

Comment peut-il être nul? –

Répondre

2

Gps fonctionne en utilisant un modèle de conception d'observateur - vous lui demandez de vous donner un emplacement, et en utilisant un écouteur, il appellera la fonction concernée par lui-même, en vous donnant l'emplacement qu'il a trouvé.

+0

Existe-t-il une meilleure méthode pour obtenir les coordonnées géographiques? –

+1

@Xarialon Non. C'est la méthode. Vous devez savoir à quoi correspond une exception de pointeur nul, puis modifier votre code pour vérifier et traiter le retour nul. C'est un codage normal. – Simon

+0

Je connais l'exception du pointeur nul, mais je veux obtenir les coordonnées quand le gps est activé. Je vais chercher le motif de conception de l'observateur parce que c'est la première fois que j'en entends parler. Retourner null est commun, mais je veux éviter cela. –

2

Le lastKnownLocation peut être nul même lorsque tout le reste fonctionne. Comme ce fut le cas ici: Android LocationManager.getLastKnownLocation() returns null

Si le GPS est en attente d'obtenir une solution, et n'a pas lastKnownLocation valide, le retour null est en réalité tout à fait raisonnable. Vous devrez attendre pour obtenir une solution. LastKnownLocation peut renvoyer une valeur nulle.

+0

WTF, donc il n'y a pas de remède? –

+2

@Xarialon Eh bien, vous pouvez vérifier les réponses nulles? – keyser

+0

Que puis-je faire pour obtenir les coordonnées? Y a-t-il une meilleure méthode? –

Questions connexes