2012-08-17 5 views
0

Je construis une application qui utilise le GPS pour déterminer le pays actuel des utilisateurs. Maintenant, puisque le GPS prend un certain temps pour trouver l'emplacement, alors qu'il cherche, je veux montrer un ProgressDialog.Android ProgressDialog erreurs ennuyeuses

donc dans mon LocationListener, j'ai appelé ProgressDialog que je déclarai avant appelé

pd 

Et juste en dessous de la partie où il montre que j'ai créé un fil pour faire les choses GPS. pour une raison quelconque, la ProgressDialog ne montre pas:/

Voici mon code:

pd = ProgressDialog.show(TipCalculatorActivity.this, "", "Looking for GPS satellites..."); 
     new Thread() 
     { 
      public void run() 
      { 
      try 
       { 
       Geocoder geocoder = new Geocoder(TipCalculatorActivity.this, Locale.getDefault()); 
       List<Address> addresses; 
       try { 
        addresses = geocoder.getFromLocation(lat, lng, 1); 
        countryCode = addresses.get(0).getAddressLine(2); 
       }catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        Toast.makeText(TipCalculatorActivity.this, "Location is not available, please try again later.", Toast.LENGTH_LONG).show(); 
        finish(); 
       } 
       if(countryCode==null){ 
        Toast.makeText(TipCalculatorActivity.this, "Location is not available, please try again later.", Toast.LENGTH_LONG).show(); 
        finish(); 
       } 
       Toast.makeText(TipCalculatorActivity.this, countryCode, Toast.LENGTH_LONG).show(); 

       } 
      catch (Exception e) 
      { 
       Log.e("tag",e.getMessage()); 
      } 
     // dismiss the progressdialog 
      pd.dismiss(); 
     } 
     }.start(); 

Quel est le problème ici ?!

Merci!

EDIT

Mon nouveau code: Où j'appelle la AsyncTask:

LocationListener onLocationChange=new LocationListener() { 
    public void onLocationChanged(Location loc) { 
     //sets and displays the lat/long when a location is provided 
     lat = loc.getLatitude(); 
     lng = loc.getLongitude(); 

     MyAsyncTask task = new MyAsyncTask(TipCalculatorActivity.this, lng, lat); 
     task.execute(); 
     Toast.makeText(TipCalculatorActivity.this, "Done :D", Toast.LENGTH_LONG).show(); 

    } 

Le AsyncTask:

public class MyAsyncTask extends AsyncTask<Void, Void, Result>{ 

private Activity activity; 
private ProgressDialog progressDialog; 

private double longitude; 
private double latitude; 
private String countryCode; 

public MyAsyncTask(Activity activity, double longitude, double latitude) { 
    super(); 
    this.activity = activity; 
    this.longitude = longitude; 
    this.latitude = latitude; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    ProgressDialog.show(activity, "", "Looking for GPS satellites..."); 
} 

@Override 
protected Result doInBackground(Void... v) { 
    Geocoder geocoder = new Geocoder(activity, Locale.getDefault()); 
    List<Address> addresses; 
    try { 
     addresses = geocoder.getFromLocation(latitude, longitude, 1); 
     countryCode = addresses.get(0).getAddressLine(2); 
    }catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Toast.makeText(activity, "Location is not available, please try again later.", Toast.LENGTH_LONG).show(); 
    } 
    if(countryCode==null){ 
     Toast.makeText(activity, "Location is not available, please try again later.", Toast.LENGTH_LONG).show(); 
    } 
    Toast.makeText(activity, countryCode, Toast.LENGTH_LONG).show(); 
    return null; 
} 

@Override 
protected void onPostExecute(Result result) { 
    progressDialog.dismiss(); 
    Toast.makeText(activity.getApplicationContext(), "Finished.", 
    Toast.LENGTH_LONG).show(); 
} 
} 
+0

est le pain grillé apparaître immédiatement? – nandeesh

+0

Regardez la réponse ci-dessous – arielschon12

Répondre

1

Si je vous étais, je vais utiliser un AsyncTask pour que:

public class MyAsyncTask extends AsyncTask<Void, Void, Result>{ 

         private Activity activity; 
         private ProgressDialog progressDialog; 

         private long longitude; 
         private long latitute; 

      public MyAsyncTask(Activity activity, Long longitude, Long latitude) { 
          super(); 
       this.activity = activity; 
       this.longitude = longitude; 
       this.latitude = latitude; 
      } 

      @Override 
      protected void onPreExecute() { 
      super.onPreExecute(); 
       progressDialog = ProgressDialog.show(activity, "Loading", "Loading", true); 
      } 

      @Override 
      protected Result doInBackground(Void... v) { 
      //do your stuff here 
      return null; 

      } 

      @Override 
      protected void onPostExecute(Result result) { 
       progressDialog.dismiss(); 
       Toast.makeText(activity.getApplicationContext(), "Finished.", 
         Toast.LENGTH_LONG).show(); 
      } 


} 

Appelez-de l'activité:

MyAsyncTask task = new AsyncTask(myActivity.this, lng, lat); 
task.execute(); 
+0

Puis-je transmettre des données comme les variables lat lng à cette tâche asynchrone? – arielschon12

+0

Oui certainement! Modifiez la structure de l'AsynTask en fonction de vos besoins. J'ai édité !! –

+0

Puis-je renvoyer des données? comme mes résultats par exemple? – arielschon12