title: Alert Dialog from Thread - Android
body: <p>I have a thread that sends GPS coordinates to a database every six seconds and I have a check that verifies that the user is within a defined area. If the user is not within the location, I want an alert dialog that notifies them that they are out of range, and if they are within the area I want a dialog that tells them they are within range. I have the checks working properly, but I have tried and I'm pretty sure that I can't add the dialog on the background thread. I have read a bit about using handlers but I'm not sure how to implement one. If you have any suggestions I would appreciate it! Thanks.</p>
  
  <p>This is how I call <code>FindLocation.java</code> from my main activity (<code>MainActivity.java</code>):</p>
  
  <pre><code>new FindLocation(getBaseContext()).start(usr_id1); //sends a user id with it
  </code></pre>
  
  <p>Below is <code>FindLocation.java</code></p>
  
  <pre><code>public class FindLocation extends Thread {
  
  public boolean inJurisdiction;
  public boolean AlertNotice = false;
  private LocationManager locManager;
  private LocationListener locListener;
  
  Context ctx;
  public String userId;
  
  public FindLocation(Context ctx) {
       this.ctx = ctx;
  }
  
   public void start(String userId) {
          this.userId = userId;
          super.start();
        }
  
   @Override
  public void run() {
       Looper.prepare();
      final String usr = userId;      
  
      //get a reference to the LocationManager
      locManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
  
      //checked to receive updates from the position
      locListener = new LocationListener() {
          public void onLocationChanged(Location loc) {
  
              String lat = String.valueOf(loc.getLatitude()); 
              String lon = String.valueOf(loc.getLongitude());
  
              Double latitude = loc.getLatitude();
              Double longitude = loc.getLongitude();
  
              if (latitude &gt;= 39.15296 &amp;&amp; longitude &gt;= -86.547546 &amp;&amp; latitude &lt;= 39.184901 &amp;&amp; longitude &lt;= -86.504288 || inArea != false) {
                  Log.i("Test", "Yes");  
  
                  inArea = true;
  
                  JSONArray jArray;
                  String result = null;
                  InputStream is = null;
                  StringBuilder sb = null;
  
                   ArrayList&lt;NameValuePair&gt; nameValuePairs = new ArrayList&lt;NameValuePair&gt;();
                   nameValuePairs.add(new BasicNameValuePair("id", usr));
  
                  //http post
                  try{
  
                       HttpClient httpclient = new DefaultHttpClient();
                       HttpPost httppost = new HttpPost("http://www.example.com/test/example.php");     
                       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                       HttpResponse response = httpclient.execute(httppost);
                       HttpEntity entity = response.getEntity();
                       is = entity.getContent();
                       }catch(Exception e){
                           Log.e("log_tag", "Error in http connection"+e.toString());
                      }
  
                  //convert response to string
                  try{
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                         sb = new StringBuilder();
                         sb.append(reader.readLine() + "\n");
  
                         String line="0";
                         while ((line = reader.readLine()) != null) {
                                        sb.append(line + "\n");
                          }
                          is.close();
                          result=sb.toString();
                          }
  
                          catch(Exception e){
                                Log.e("log_tag", "Error converting result "+e.toString());
  
  
                          }
  
                  try{
                        jArray = new JSONArray(result);
                        JSONObject json_data=null;
                        for(int i=0;i&lt;jArray.length();i++){
                               json_data = jArray.getJSONObject(i);
                               String ct_name = json_data.getString("phoneID");
                               Log.i("User ID", ct_name);
                               if(ct_name == usr) {
                                   locManager.removeUpdates(locListener);
                               }
                               else{
                                   locManager.removeUpdates(locListener);
                                   Log.i("User ID", "NONE");
                               }
                           } 
                        }
  
                        catch(Exception e){
                              //Log.e("log_tag", "Error converting result "+e.toString());
  
                              HttpClient httpclient = new DefaultHttpClient();
                              HttpPost httppost = new HttpPost("http://example.com/test/example.php");
  
                              try {
                                     List&lt;NameValuePair&gt; nameValuePairs1 = new ArrayList&lt;NameValuePair&gt;(2);
                                     nameValuePairs1.add(new BasicNameValuePair("lat", lat)); 
                                     nameValuePairs1.add(new BasicNameValuePair("lon", lon));
                                     nameValuePairs1.add(new BasicNameValuePair("id", usr));
                                     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs1));
                                     httpclient.execute(httppost);
                                     Log.i("SendLocation", "Yes"); 
                               } 
                               catch (ClientProtocolException g) {
                                   // TODO Auto-generated catch block
                               } catch (IOException f) {
                                  // TODO Auto-generated catch block
                                  e.printStackTrace();
                              } 
                  } 
              } 
  
              else {
                  Log.i("Test", "No");
                  inArea = false;
              }
          }
          public void onProviderDisabled(String provider){
          }
          public void onProviderEnabled(String provider){ 
          }
          public void onStatusChanged(String provider, int status, Bundle extras){
          }
      };
      locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 0, locListener);
      Looper.loop();
   }
  }
  </code></pre>