2014-07-25 3 views
0

Je voudrais afficher la latitude et la longitude dans tvLatitude et tvLongitude (qui sont les deux TextView) en cliquant sur un bouton. Cela ne fonctionne pas avec le code que j'ai actuellement, que vous pouvez voir ci-dessous. Le problème est que lorsque le contrôle atteint la chaîne latitude = Double.toString(loc.getLatitude()); le programme s'arrête malheureusement. Quelqu'un peut-il me dire pourquoi loc.getLatitude et loc.getLongitude ne répondent pas?onLocationChanged() jamais appelé dans Android

package mk.bukhari.loctrack; 

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.os.Build; 

public class MainActivity extends ActionBarActivity implements LocationListener { 

    TextView tvLat, tvLon; 
    Button btnLoc; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()).commit(); 
      tvLat = (TextView) findViewById(R.id.tvLatitude); 
      tvLon = (TextView) findViewById(R.id.tvLongitude); 
      btnLoc = (Button) findViewById(R.id.btnLocation); 

      final LocationManager locman = (LocationManager) 
      getSystemService(LOCATION_SERVICE); 
      locman.requestLocationUpdates("gps", 0, 0, this); 

      btnLoc.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Log.d("LocTrack", "Button Clicked"); 
        Location loc = locman.getLastKnownLocation("gps"); 
        onLocationChanged(loc); 
       } 
      });   
     } 
    } 
} 

    @Override 
    public void onLocationChanged(Location loc) { 
     Log.d("LocTrack", "Entering onLacationChanged"); 
     String latitude = Double.toString(loc.getLatitude()); 
     String longitude = Double.toString(loc.getLongitude()); 
     Log.d("LocTrack", "Setting txt in tv"); 
     tvLat.setText(latitude); 
     tvLon.setText(longitude); 
    } 

    @Override 
    public void onProviderDisabled(String arg0) {} 

    @Override 
    public void onProviderEnabled(String arg0) {} 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} 
} 
+0

jusqu'à Log.d ("LocTrack", "Saisie OnLocationChanged"); ce programme de ligne s'exécute comme prévu, Entrer onLocationChanged est affiché dans logcat mais l'application s'arrête à côté de lui et affiche une boîte de dialogue disant "malheureusement LocTrak s'est arrêté" –

+0

Pouvez-vous poster votre logcat? Donc, nous pouvons savoir quel est le problème –

+0

Désolé l'image de bro ne télécharge pas me guider comment je fournis cette image –

Répondre

0

Ok, Il semble que votre position retourne null, essayez de changer votre code de cette façon:

@Override 
public void onLocationChanged(Location loc) { 
    Log.d("LocTrack", "Entering onLacationChanged"); 

    if(loc != null) { //Add this validation 
     String latitude = Double.toString(loc.getLatitude()); 
     String longitude = Double.toString(loc.getLongitude()); 
     Log.d("LocTrack", "Setting txt in tv"); 
     tvLat.setText(latitude); 
     tvLon.setText(longitude); 
    } else //If loc is null then inform the user 
     Toast.makeText(this, "Unable to find your location, try again", Toast.LENGTH_SHORT).show(); 
} 
+0

oui frère vous aviez raison. la partie else est en cours d'exécution. que dois-je faire maintenant –

+0

CarlosJimenez loc revient null. S'il vous plaît, guidez-moi ce que je devrais faire maintenant. pourquoi loc est null –

+0

Cochez cette case (http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/) tutoriel. Je suis sûr que cela va vous aider –

0

On dirait que vous utilisez le fournisseur faux.

Essayez d'appeler

locman.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0 , 0, this); 

puis dans votre onClick(View v)

Location loc = locman.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
+0

ok bro je vous reconnais dans un moment après avoir fait des changements –

+0

j'ai remplacé les codes mais locman.requestLocationUpdates (LocationManager.GPS_PROVIDER); donner une erreur et suggérer d'ajouter un argument –

+0

J'ai modifié le code dans la réponse. Veuillez réessayer. – shyam

Questions connexes