title: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
body: <p>I am getting this error when I run the app on any <strong>pre lollipop device</strong>, unless the app is running perfectly in >= 5.0 versions.</p>
  
  <p>This is what I am getting:</p>
  
  <pre><code>                                                                                   Process: com.hashrail.newyorkcityguide, PID: 31045
                                                                                     java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
                                                                                         at com.google.android.gms.common.internal.zzx.zzb(Unknown Source)
                                                                                         at com.google.android.gms.maps.model.BitmapDescriptorFactory.zzAi(Unknown Source)
                                                                                         at com.google.android.gms.maps.model.BitmapDescriptorFactory.fromBitmap(Unknown Source)
                                                                                         at com.hashrail.newyorkcityguide.fragment.FragmentNearby.onActivityCreated(FragmentNearby.java:160)
                                                                                         at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1983)
                                                                                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1092)
                                                                                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
                                                                                         at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
                                                                                         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
                                                                                         at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
                                                                                         at com.hashrail.newyorkcityguide.MainActivity.showScreen(MainActivity.java:335)
                                                                                         at com.hashrail.newyorkcityguide.MainActivity.showNearbyFragment(MainActivity.java:249)
                                                                                         at com.hashrail.newyorkcityguide.fragment.FragmentListPlaces$OnMapClickListener$1.run(FragmentListPlaces.java:243)
                                                                                         at android.os.Handler.handleCallback(Handler.java:808)
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:103)
                                                                                         at android.os.Looper.loop(Looper.java:193)
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:5333)
                                                                                         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)
      05-18 11:31:27.932 31045-31145/com.hashrail.newyorkcityguide E/GAv4: Successfully bound to service but never got onServiceConnected callback
  </code></pre>
  
  <p><strong>MainActivity</strong></p>
  
  <pre><code>    public class MainActivity extends FragmentActivity{
  
          public static float density;
          private static final int PERMISSION_REQUEST_CODE_LOCATION = 1;
          public static Context context;
  
          private GPSTracker gps;
          private double latitudeGet, longitudeGet;
  
          public static String getApiKey() {
              return context.getString(R.string.google_api_key);
          }
  
          private String cityGet, countryGet;
  
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              MapsInitializer.initialize(getApplicationContext());
              try {
                  context = this;
                  ThemeUtil.setTranslucentTheme(this);
  
                  density = getResources().getDisplayMetrics().density;
  
                  setContentView(R.layout.activity_main);
  
                 /* if (android.os.Build.VERSION.SDK_INT &gt; 9 || android.os.Build.VERSION.SDK_INT &lt; 21 ) {
                      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                              .permitAll().build();
                      StrictMode.setThreadPolicy(policy);
                  }*/
  
                  DatabaseManager.initWithContext(this);
                  ImageLoader.getInstance().init(
                          ImageOptionsBuilder.createImageLoaderConfiguration(this));
  
                  Constants.DEFAULT_PHOTO_WIDTH = getResources().getDisplayMetrics().widthPixels;
  
                  showHomeFragment();
  
                  new Handler().postDelayed(new Runnable() {
                      @Override
                      public void run() {
                          NearbyPlacesManager.getInstance();
                      }
                  }, 1000);
  
                  new AboutDataLoader().loadData(this);
                  if (checkPermission(Manifest.permission.ACCESS_FINE_LOCATION,getApplicationContext(),MainActivity.this)) {
                      getCurrentArea();
                  }
                  else
                  {
                      requestPermission(Manifest.permission.ACCESS_FINE_LOCATION,PERMISSION_REQUEST_CODE_LOCATION,getApplicationContext(),MainActivity.this);
                  }
                  // initAdmob();
  
                  initAppoDeal();
                 /* if (NetConnectivity.isOnline(getApplicationContext())) {
                  } else {
                  }*/
                  //Fabric.with(this, new Crashlytics());
  
  
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
  
          private void initAppoDeal() {
  
              String appKey = "703f62f01e41eecc435236577c2e5500d1f291d2acd9fab3";
              Appodeal.initialize(this, appKey, Appodeal.BANNER);
              Appodeal.show(this, Appodeal.BANNER);
  
              /*
              Appodeal.setNativeCallbacks(new NativeCallbacks() {
                  @Override
                  public void onNativeLoaded(List&lt;NativeAd&gt; nativeAds) {
                      Log.d("Appodeal", "onNativeLoaded");
                  }
                  @Override
                  public void onNativeFailedToLoad() {
                      Log.d("Appodeal", "onNativeFailedToLoad");
                  }
  
                  @Override
                  public void onNativeShown(NativeAd nativeAd) {
                      Log.d("Appodeal", "onNativeShown");
                  }
  
                  @Override
                  public void onNativeClicked(NativeAd nativeAd) {
                      Log.d("Appodeal", "onNativeClicked");
                      Toast.makeText(MainActivity.this, "Your Clicked", Toast.LENGTH_LONG).show();
                  }
              });*/
  
  
          }
          public static void requestPermission(String strPermission,int perCode,Context _c,Activity _a){
  
              if (ActivityCompat.shouldShowRequestPermissionRationale(_a,strPermission)){
                  //Toast.makeText(getApplicationContext(),"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show();
              } else {
  
                  ActivityCompat.requestPermissions(_a,new String[]{strPermission},perCode);
              }
          }
  
          public static boolean checkPermission(String strPermission,Context _c,Activity _a){
              int result = ContextCompat.checkSelfPermission(_c, strPermission);
              if (result == PackageManager.PERMISSION_GRANTED){
  
                  return true;
  
              } else {
  
                  return false;
  
              }
          }
  
          @Override
          public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
              switch (requestCode) {
  
                  case PERMISSION_REQUEST_CODE_LOCATION:
                      if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  
                          getCurrentArea();
  
                      } else {
  
                          Toast.makeText(getApplicationContext(),"Permission Denied, You cannot access location data.",Toast.LENGTH_LONG).show();
  
                      }
                      break;
  
              }
          }
          private void getCurrentArea() {
  
              gps = new GPSTracker(MainActivity.this);
  
              // check if GPS enabled
              if (gps.canGetLocation()) {
  
                  latitudeGet = gps.getLatitude();
                  longitudeGet = gps.getLongitude();
  
                  Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
                  try {
                      List&lt;Address&gt; addresses = geoCoder.getFromLocation(latitudeGet, longitudeGet, 1);
                      //List&lt;Address&gt; addresses = geoCoder.getFromLocation(17.4126274,78.2679594, 1);
  
  
                      if (addresses.size() &gt; 0) {
                          System.out.println(addresses.get(0).getLocality());
                          System.out.println(addresses.get(0).getCountryName());
                          cityGet = addresses.get(0).getLocality();
                          countryGet = addresses.get(0).getCountryName();
                          AppSettings.LATITUDE = latitudeGet;
                          AppSettings.LONGITUDE = longitudeGet;
                          // AppSettings.LATITUDE = 17.4126274;
                          // AppSettings.LONGITUDE= 78.2679594;
                          AppSettings.TOWN = cityGet;
                          AppSettings.COUNTRY = countryGet;
  
                      }
  
                      //showToastMessage(add);
                      // Toast.makeText(MainActivity.this, "Your Location is -  " + cityGet + " " + countryGet, Toast.LENGTH_LONG).show();
                  } catch (IOException e1) {
                      e1.printStackTrace();
                  }
                  // \n is for new line
                  // Toast.makeText(MainActivity.this, "Your Location is - \nLat: " + latitudeGet + "\nLong: " + longitudeGet, Toast.LENGTH_LONG).show();
              } else {
                  // can't get location
                  // GPS or Network is not enabled
                  // Ask user to enable GPS/network in settings
                  gps.showSettingsAlert();
              }
          }
  
          public void showNearbyFragment(Constants.PLACE_TYPES type, Place placeDetail, boolean showCurrentLocation) {
              showScreen(FragmentNearby.newInstance(type, placeDetail, showCurrentLocation), FragmentNearby.TAG, true, false);
          }
  
          public boolean isNearbyFragmentShowed() {
              return getSupportFragmentManager().findFragmentByTag(FragmentNearby.TAG) != null;
          }
  
          public void showListFragment(Constants.PLACE_TYPES type) {
              showScreen(FragmentListPlaces.newInstance(type), FragmentListPlaces.TAG, true, false);
          }
  
          private void showHomeFragment() {
              showScreen(FragmentHome.newInstance(), FragmentHome.TAG, false, false);
          }
  
          public void showForecastFragment() {
  
              showScreen(FragmentForecast.newInstance(), FragmentForecast.TAG, true, false);
          }
  
          public void showAboutFragment() {
  
              showScreen(FragmentAbout.newInstance(), FragmentAbout.TAG, true, false);
          }
  
          public void showLoadingDialog() {
              DialogFragmentLoading.newInstance().show(getSupportFragmentManager(), DialogFragmentLoading.TAG);
          }
  
          public void showPhotoDialog(Photo photo) {
              DialogFragmentPhoto.newInstance(photo).show(getSupportFragmentManager(), DialogFragmentPhoto.TAG);
          }
  
  
          public void showPlaceDetailFragment(Place place, Constants.PLACE_TYPES type) {
              FragmentPlaceDetail fragmentPlaceDetail = FragmentPlaceDetail.newInstance(place, type);
  
              showScreen(fragmentPlaceDetail, FragmentPlaceDetail.TAG, true, false);
          }
  
          public void showReviewsScreen(PlaceDetails placeDetails, Constants.PLACE_TYPES type) {
              FragmentReviews fragmentReviews = FragmentReviews.newInstance(placeDetails, type);
  
              showScreen(fragmentReviews, FragmentReviews.TAG, true, false);
          }
  
  
          public void hideLoadingDialog() {
  
              Fragment loadingFragment = getSupportFragmentManager().findFragmentByTag(DialogFragmentLoading.TAG);
  
              if (loadingFragment != null) {
                  ((DialogFragmentLoading) loadingFragment).dismiss();
              }
          }
  
  
          private void showScreen(Fragment content,
                                  String contentTag, boolean addToBackStack, boolean clearBackStack) {
  
              if (!NetworkFetcher.isNetworkConnected(MainActivity.this) &amp;&amp; !contentTag.equalsIgnoreCase(FragmentHome.TAG)) {
                  Toast.makeText(this, getString(R.string.no_internet_connection), Toast.LENGTH_LONG).show();
  
                  return;
              }
  
              FragmentManager fm = getSupportFragmentManager();
  
              FragmentTransaction ft = fm.beginTransaction();
              ft.setCustomAnimations(R.anim.left_slide_in, R.anim.left_slide_out,
                      R.anim.right_slide_in, R.anim.right_slide_out);
  
  
              ft.replace(R.id.activity_main_content, content, contentTag);
  
  
              if (clearBackStack) {
                  fm.popBackStackImmediate(null,
                          FragmentManager.POP_BACK_STACK_INCLUSIVE);
              }
  
              if (addToBackStack) {
                  ft.addToBackStack(String.valueOf(System.identityHashCode(content)));
              }
  
              ft.commitAllowingStateLoss();
              fm.executePendingTransactions();
          }
  
  
      }
  </code></pre>