title: I'm getting a null pointer exception error
body: <p>I get a Null pointer exception error in the getLatitude and getLongitude area of the code.How do I resolve this.
  That's been my major challenge. Please help as it's causing much upset since my app keeps crashing everytime</p>
  
  <pre><code>package www.uneditedmap.com.locationandmap;
  
  import android.content.Context;
  import android.location.Location;
  import android.location.LocationListener;
  import android.location.LocationManager;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.support.v4.app.FragmentActivity;
  import android.util.Log;
  
  import com.google.android.gms.maps.CameraUpdateFactory;
  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.MapFragment;
  import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  import com.google.android.gms.maps.model.LatLng;
  import com.google.android.gms.maps.model.Marker;
  import com.google.android.gms.maps.model.MarkerOptions;
  
  import org.apache.http.HttpEntity;
  import org.apache.http.HttpResponse;
  import org.apache.http.StatusLine;
  import org.apache.http.client.HttpClient;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import java.io.BufferedReader;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  
  public class Restaurant extends FragmentActivity implements LocationListener {
      private final int MAX_PLACES = 20;
      private GoogleMap theMap;
      private LocationManager locMan;
      private Marker userMarker;
      private int defautltId, restaurantId;
      private Marker[] placeMarkers;
      private MarkerOptions[] places;
      String apiKey;
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_new_map);
          defautltId = R.drawable.ic_default;
          restaurantId = R.drawable.ic_restaurant;
  
          apiKey = getResources().getString(R.string.google_maps_key);
  
          if (theMap == null) {
              //map not instantiated yet
              theMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.the_map)).getMap();
              if (theMap != null) {
                  //ok - proceed
                  theMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                  placeMarkers = new Marker[MAX_PLACES];
                  //update places
                  updatePlaces();
              }
          }
      }
  
      private void updatePlaces() {
  //update location
          locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
          Location lastLoc = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
         if (lastloc != null) {
             double lat = lastLoc.getLatitude();
             double lng = lastLoc.getLongitude();
         }
          LatLng lastLatLng = new LatLng(lat, lng);
          if (userMarker != null) {
              userMarker.remove();
          }
          userMarker = theMap.addMarker(new MarkerOptions()
                  .position(lastLatLng)
                  .title("You are here")
                  .icon(BitmapDescriptorFactory.fromResource(defautltId))
                  .snippet("Your last recorded location"));
          theMap.animateCamera(CameraUpdateFactory.newLatLng(lastLatLng), 3000, null);
  
          String placesSearchStr = "https://maps.googleapis.com/maps/api/place/nearbysearch/" +
                  "json?location=" + lat + "," + lng +
                      "&amp;radius=3000" +
                      "&amp;types=food|bar" + "&amp;key=" + apiKey +  "&amp;sensor=true";
  
  
          //Reference for searching through url
          //https://maps.googleapis.com/maps/api/place/radarsearch/
          // json?radius=200&amp;key=AIzaSyDPVYhZDzHdxRGnqqHZSWccL-BEe-JSYXA
          // &amp;location=-33.86705220%2C151.19573620&amp;keyword=attractions
  
          //My Add
  //        https://maps.googleapis.com/maps/api/place/nearbysearch/
  //         json?location=51.503186,-0.126446&amp;radius=1000&amp;sensor=true&amp;types=food|bar
  //         &amp;key=AIzaSyCBQyZ8lxV5vmLDMQRAuVBHIeBGnURpfCo&amp;keyword=restaurants
  
          //Reference add
          //https://maps.googleapis.com/maps/api/place/radarsearch/json?
          // location=51.503186,-0.126446&amp;radius=5000
          // &amp;keyword=health&amp;key=AIzaSyCshx_mxH4pJlxZAEfdHK4o012zZfitwX0
  
          new GetPlaces().execute(placesSearchStr);
          locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 100, this);
  
      }
  
      @Override
      protected void onResume() {
          super.onResume();
          if (theMap != null) {
              locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 100, this);
          }
      }
  
      @Override
      protected void onPause() {
          super.onPause();
          if (theMap != null) {
              locMan.removeUpdates(this);
          }
      }
  
      @Override
      public void onLocationChanged(Location location) {
          Log.v("Restaurant", "location changed");
          updatePlaces();
  
      }
  
      @Override
      public void onProviderDisabled(String provider) {
          Log.v("Restaurant", "provider disabled");
      }
  
      @Override
      public void onProviderEnabled(String provider) {
          Log.v("Restaurant", "provider enabled");
      }
  
      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {
          Log.v("Restaurant", "status changed");
      }
  
      private class GetPlaces extends AsyncTask&lt;String, Void, String&gt; {
          //fetch and parse place data
          //yak4woundei@yahoo.com
          @Override
          protected String doInBackground(String... placesURL) {
              //fetch places
              StringBuilder placesBuilder = new StringBuilder();
              //process search parameter string(s)
              for (String placeSearchURL : placesURL) {
                  //execute search
                  HttpClient placesClient = new DefaultHttpClient();
                  try {
                      //try to fetch the data
                      HttpGet placesGet = new HttpGet(placeSearchURL);
                      HttpResponse placesResponse = placesClient.execute(placesGet);
                      StatusLine placeSearchStatus = placesResponse.getStatusLine();
                      if (placeSearchStatus.getStatusCode() == 200) {
                          //we have an OK response
                          HttpEntity placesEntity = placesResponse.getEntity();
                          InputStream placesContent = placesEntity.getContent();
                          InputStreamReader placesInput = new InputStreamReader(placesContent);
                          BufferedReader placesReader = new BufferedReader(placesInput);
                          String lineIn;
                          while ((lineIn = placesReader.readLine()) != null) {
                              placesBuilder.append(lineIn);
                          }
                      }
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
              return placesBuilder.toString();
          }
  
          protected void onPostExecute(String result) {
              //parse place data returned from Google Places
              if (placeMarkers != null) {
                  for (int pm = 0; pm &lt; placeMarkers.length; pm++) {
                      if (placeMarkers[pm] != null)
                          placeMarkers[pm].remove();
                  }
              }
              try {
                  //parse JSON
  
                  JSONObject resultObject = new JSONObject(result);
                  JSONArray placesArray = resultObject.getJSONArray("results");
                  places = new MarkerOptions[placesArray.length()];
                  //loop through places
                  for (int p = 0; p &lt; placesArray.length(); p++) {
                      //parse each place
                      boolean missingValue = false;
                      LatLng placeLL = null;
                      String placeName = "";
                      String vicinity = "";
                      int currIcon = restaurantId;
  
                      try {
                          //attempt to retrieve place data values
                          missingValue = false;
                          JSONObject placeObject = placesArray.getJSONObject(p);
                          JSONObject loc = placeObject.getJSONObject("geometry").getJSONObject("location");
                          placeLL = new LatLng(
                                  Double.valueOf(loc.getString("lat")),
                                  Double.valueOf(loc.getString("lng")));
                          JSONArray types = placeObject.getJSONArray("types");
                          for (int t = 0; t &lt; types.length(); t++) {
                              //what type is it
                              String thisType = types.get(t).toString();
                              if (thisType.contains("food")) {
                                  currIcon = restaurantId;
                                  break;
                              }
                          }
                          vicinity = placeObject.getString("vicinity");
                          placeName = placeObject.getString("name");
  
                      } catch (JSONException jse) {
                          missingValue = true;
                          jse.printStackTrace();
                      }
                      if (missingValue) places[p] = null;
                      else
                          places[p] = new MarkerOptions()
                                  .position(placeLL)
                                  .title(placeName)
                                  .icon(BitmapDescriptorFactory.fromResource(currIcon))
                                  .snippet(vicinity);
  
                  }
  
              } catch (Exception e) {
                  e.printStackTrace();
              }
              if (places != null &amp;&amp; placeMarkers != null) {
                  for (int p = 0; p &lt; places.length &amp;&amp; p &lt; placeMarkers.length; p++) {
                      //will be null if a value was missing
                      if (places[p] != null)
                          placeMarkers[p] = theMap.addMarker(places[p]);
                  }
              }
          }
  
  
      }
  
  
  }
  </code></pre>
  
  <p>Log cat:</p>
  
  <pre><code>11-17 20:30:40.532  17851-17851/www.uneditedmap.com.locationandmap E/AndroidRuntime﹕ FATAL EXCEPTION: main
      Process: www.uneditedmap.com.locationandmap, PID: 17851
      java.lang.RuntimeException: Unable to start activity ComponentInfo{www.uneditedmap.com.locationandmap/www.uneditedmap.com.locationandmap.Restaurant}: java.lang.NullPointerException
              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
              at android.app.ActivityThread.access$800(ActivityThread.java:151)
              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
              at android.os.Handler.dispatchMessage(Handler.java:110)
              at android.os.Looper.loop(Looper.java:193)
              at android.app.ActivityThread.main(ActivityThread.java:5292)
              at java.lang.reflect.Method.invokeNative(Native Method)
              at java.lang.reflect.Method.invoke(Method.java:515)
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
              at dalvik.system.NativeStart.main(Native Method)
       Caused by: java.lang.NullPointerException
              at www.uneditedmap.com.locationandmap.Restaurant.updatePlaces(Restaurant.java:71)
              at www.uneditedmap.com.locationandmap.Restaurant.onCreate(Restaurant.java:62)
              at android.app.Activity.performCreate(Activity.java:5264)
              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
              at android.app.ActivityThread.access$800(ActivityThread.java:151)
              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
              at android.os.Handler.dispatchMessage(Handler.java:110)
              at android.os.Looper.loop(Looper.java:193)
              at android.app.ActivityThread.main(ActivityThread.java:5292)
              at java.lang.reflect.Method.invokeNative(Native Method)
              at java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
              at dalvik.system.NativeStart.main(Native Method)
  </code></pre>