public MovieDataCustomAdapter(Context c, ArrayList<MoviePosterdata> movieDataList) {

    // set member variables
    this.mContext = c;
    this.mMovieDataList = movieDataList;
    mPosterImageSize = RunningDeviceProps.getImgSizeToBeQueried();
    mMoviePosterBaseURL = CommonGlobalObjects.getMoviePosterBaseURL();
  }
  private void setErrorDrawable() {
    try {
      // get Place holder image from Drawable
      Bitmap errorBMP = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.error);
      Bitmap resizedErrorBMP =
          Bitmap.createScaledBitmap(
              errorBMP,
              RunningDeviceProps.getMoviePosterResizeWidth(),
              RunningDeviceProps.getMoviePosterResizeHeight(),
              true);
      mErrorDrawable = new BitmapDrawable(mContext.getResources(), resizedErrorBMP);

    } catch (Exception e) {
      String errMsg =
          CommonGlobalObjects.constructErrorMsg(
              "Generic Exception", "setErrorDrawable", e.getMessage());
      Log.e(MOVIE_ADAPATER_LOG_TAG, errMsg);
    }
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    try {

      ImageView moviePosterImgView;

      /*
       * the path retrieved in the json is relative to the movie poster, so we need to manipulate it,
       * we need to append a base path ahead of this relative path to build the complete url
       * so, get path value from the MovieInfo instance at the position that is passed in
       * and construct the full url to the poster
       * */
      String posterURL;
      posterURL =
          mMoviePosterBaseURL
              + mPosterImageSize
              + mMovieDataList.get(position).getMoviePosterPath();

      if (convertView == null) {

        // ImgaeView getting created for the first time
        moviePosterImgView = new ImageView(mContext);

        moviePosterImgView.setLayoutParams(
            new GridView.LayoutParams(
                RunningDeviceProps.getMoviePosterImgViewWidth(),
                RunningDeviceProps.getMoviePosterImgViewHeight()));

        // read padding value from global class and set it on the ImageView
        int imgViewPadding = RunningDeviceProps.getPosterImgViewPadding();
        moviePosterImgView.setPadding(
            imgViewPadding, imgViewPadding, imgViewPadding, imgViewPadding);
      } else {
        // system sent the recycled image view
        moviePosterImgView = (ImageView) convertView;
      }

      // arratch the Movie Id as a Tag, so that it can be referred in detail activity
      moviePosterImgView.setTag(mMovieDataList.get(position).getMovieIDInAPI());

      // set the Place holder image from Drawable if not set already
      if (mPlaceHolderDrawable == null) {
        setPlaceHolderDrawable();
      }

      // set the Place holder image from Drawable if not set already
      if (mErrorDrawable == null) {
        setErrorDrawable();
      }

      // load image into the movie poster image view using Picasso
      Picasso.with(mContext)
          .load(posterURL)
          .placeholder(mPlaceHolderDrawable)
          .error(mErrorDrawable)
          .resize(
              RunningDeviceProps.getMoviePosterResizeWidth(),
              RunningDeviceProps.getMoviePosterResizeHeight())
          .into(moviePosterImgView);

      // moviePosterImgView.setImageResource(R.drawable.sample_0);
      return moviePosterImgView;

    } catch (NullPointerException e) {
      String errMsg =
          CommonGlobalObjects.constructErrorMsg(
              "Null Pointer Exception", "getView()", e.getMessage());
      Log.e(MOVIE_ADAPATER_LOG_TAG, errMsg);
      return null;
    } catch (Exception e) {
      String errMsg =
          CommonGlobalObjects.constructErrorMsg("Generic Exception", "getView()", e.getMessage());
      Log.e(MOVIE_ADAPATER_LOG_TAG, errMsg);
      return null;
    }
  }