2013-05-16 3 views
1

J'essaie de créer une chaîne avec les coordonnées GPS d'origine et de destination à des fins de cartographie google. La première chose que je dois faire est d'obtenir les coordonnées GPS de mon emplacement actuel, puisque c'est le point d'origine. Ensuite, j'ai besoin de concaténer ces coordonnées dans une plus grande chaîne que j'utilise pour obtenir des directions.Problème de séquençage Android onCreate

J'ai le code qui obtient ces coordonnées, ainsi que le code qui les concatène dans le format de chaîne correct. Cependant, mon problème est que mon code de construction de chaîne exécute d'abord, ce qui me laisse avec des problèmes de pointeur nul puisque la chaîne fait référence aux coordonnées GPS qui n'ont pas encore été traitées.

La voici. La méthode gotLocation() vient de mettre en œuvre des conseils dans ce post:

Public class DirectionsActivity extends Activity { 

    String myLat, myLng; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Parser parser; 

     LocationResult locationResult = new LocationResult(){ 
      @Override 
      public void gotLocation(final Location location){ 
       try { 
        Double lat = location.getLatitude(); 
        Double lng = location.getLongitude(); 
        if (lat != 0.0 && lng != 0.0) {      
         myLat = Double.toString(lat); 
         myLng = Double.toString(lng); 
         String gps_location = myLat + " " + myLng; 
         Toast.makeText(getBaseContext(), "First Message", Toast.LENGTH_SHORT).show(); 
        } 
       }catch (Exception e) { 

       } 
      } 
     }; 

     MyLocation myLocation = new MyLocation(); 
     myLocation.getLocation(this, locationResult); 

     Toast.makeText(getBaseContext(), "Second Message", Toast.LENGTH_LONG).show(); 

     buildString(); 

     setContentView(R.layout.activity_directions); 

    } 

La sortie de pain grillé quand je lance c'est « deuxième message » suivi de « Premier message ». Ils devraient afficher dans l'ordre inverse.

+0

Vous ne pouvez pas afficher "SecondMessage" après "FirstMessage" si vous utilisez le code de cette question: http://stackoverflow.com/questions/6894195/getting-android-location-and-return-unknown -ou-null-when-providers-are-unavail. Faites 'buildString()' dans 'gotLocation'. –

Répondre

0

L'obtention d'un emplacement est une opération asynchrone, vous n'avez aucun contrôle sur l'heure à laquelle vous obtenez la réponse du système. Comment vous assurez-vous de trouver un tapis de téléphone satellite ou cellulaire avant que votre pain grillé apparaisse? :)

+0

Bien sûr. Mais y a-t-il un moyen d'attendre que j'en ai un? – Alex

+0

Que voulez-vous dire? – Snicolas

+0

Désolé. Est-il possible de forcer le programme à attendre que le GPS renvoie ses coordonnées. Pour l'instant, je ne m'inquiète pas de savoir si j'ai vraiment une connexion. Je vais construire ces vérifications plus tard. Je sais que j'ai une connexion pendant mes tests. Peut-être que je pourrais les séparer en différents fils et forcer le second fil à attendre. Sauf que je n'ai aucune idée de comment le faire en Java. Aussi, je soupçonne qu'il peut y avoir des méthodes qui imposent déjà le séquençage qui m'intéresse. Juste une supposition. Des idées? Merci! – Alex