title: I keep getting an inaccurate location in Android
body: <p>my app records the gps location on a button click; however when I do it says I'm about three blocks away and is extremely inaccurate. Can you take a look at my code to see how I can improve it? Thanks</p>
  
  <pre><code>@Override
          protected Void doInBackground(Void... arg0) {
              SharedPreferences prefs = getSharedPreferences("Settings", 0);
              final String id = prefs.getString("ID", "");
              DefaultHttpClient httpclient = new DefaultHttpClient();
              HttpPost httpost = new HttpPost(
                      "http://iphone-radar.com/gps/gps_locations");
  
              JSONObject holder = new JSONObject();
  
              try {
                  holder.put("id", id);
                  LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
                  Criteria criteria = new Criteria();
                  String bestProvider = locationManager.getBestProvider(criteria,
                          false);
                  LocationListener loc_listener=new LocationListener() {
  
                      @Override
                      public void onStatusChanged(String provider, int status, Bundle extras) {
                          // TODO Auto-generated method stub
  
                      }
  
                      @Override
                      public void onProviderEnabled(String provider) {
                          // TODO Auto-generated method stub
  
                      }
  
                      @Override
                      public void onProviderDisabled(String provider) {
                          // TODO Auto-generated method stub
  
                      }
  
                      @Override
                      public void onLocationChanged(Location location) {
                          // TODO Auto-generated method stub
  
                      }
                  };
                  try{
                      Looper.prepare();
                  locationManager.requestLocationUpdates(bestProvider, 0, 0, loc_listener);
                  }catch(Exception e){
                      e.printStackTrace();
                  }
                  Location location=locationManager.
  
  getLastKnownLocation(bestProvider);
              Calendar c = Calendar.getInstance();
              SimpleDateFormat sdf = new SimpleDateFormat("hh:mmaa dd'/'MM'/'yyyy");
  
              holder.put("time", sdf.format(c.getTime()));
              holder.put("time_since_epoch", System.currentTimeMillis());
              try {
                  holder.put("lat", location.getLatitude());
                  holder.put("lon", location.getLongitude());
              } catch (NullPointerException e) {
                  try {
                      holder.put("lat", -1.0);
                      holder.put("lon", -1.0);
                  } catch (JSONException e1) {
                      // TODO Auto-generated catch block
                      e1.printStackTrace();
                  }
              }
  
              StringEntity se = new StringEntity(holder.toString());
              httpost.setEntity(se);
              httpost.setHeader("Accept", "application/json");
              httpost.setHeader("Content-type", "application/json");
  
              ResponseHandler responseHandler = new BasicResponseHandler();
              String response = httpclient.execute(httpost, responseHandler);
              org.json.JSONObject obj;
  
                  obj = new org.json.JSONObject(response);
  
          } catch (JSONException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          } catch (UnsupportedEncodingException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          } catch (ClientProtocolException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
  </code></pre>