I have gone through all the places in my code in where I am using fragmentpagestateAdapter.
I am using fragmentStatePagerAdapter at four different position. When trying to reproduce this issue the stack trace produced is of different from the one I am encountering with my user and last note: this error is not encountered on all running devices or my test devices.
java.lang.NullPointerException! 
    1. at          android.support.v4.app.FragmentStatePagerAdapter.a(FragmentStatePagerAdapter.jav  a:116)
    2   at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:870)
    3   at android.support.v4.view.ViewPager.populate(ViewPager.java:1020)
    4   at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
    5   at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474)
    6   at android.view.View.measure(View.java:16840)
    7   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
    8   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:477)
    9   at android.view.View.measure(View.java:16840)
    10  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
    11  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    12  at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
    13  at android.view.View.measure(View.java:16840)
    14  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
    15  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    16  at android.view.View.measure(View.java:16840)
    17  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
    18  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    19  at android.view.View.measure(View.java:16840)
    20  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
    21  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.enter code herejava:1410)
    22  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    23  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    24  at android.view.View.measure(View.java:16840)
    25  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
    26  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    27  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2586)
    28  at android.view.View.measure(View.java:16840)
    29  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2074)
    30  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1234)
    31  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1417)
    32  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1131)
    33  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6286)
    34  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
    35  at android.view.Choreographer.doCallbacks(Choreographer.java:591)
    36  at android.view.Choreographer.doFrame(Choreographer.java:561)
    37  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
    38  at android.os.Handler.handleCallback(Handler.java:730)
    39  at android.os.Handler.dispatchMessage(Handler.java:92)
    40  at android.os.Looper.loop(Looper.java:177)
    41  at android.app.ActivityThread.main(ActivityThread.java:5493)
    42  at java.lang.reflect.Method.invokeNative(Native Method)
    43  at java.lang.reflect.Method.invoke(Method.java:525)
    44  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225)
    45  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041)
    46  at dalvik.system.NativeStart.main(Native Method)
First pager implementation.
public class MyPagerAdapter extends FragmentStatePagerAdapter {
        private int mCutOffPage;
        private Fragment mPrimaryItem;
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int i) {
            if (i >= mCurrentPageSequence.size()) {
                return null;
            }
            return mCurrentPageSequence.get(i).createFragment();
        }
        @Override
        public int getItemPosition(Object object) {
            // TODO: be smarter about this
            if (object == mPrimaryItem) {
                // Re-use the current fragment (its position never changes)
                return POSITION_UNCHANGED;
            }
            return POSITION_NONE;
        }
        @Override
        public void setPrimaryItem(ViewGroup container, int position,
                                   Object object) {
            super.setPrimaryItem(container, position, object);
            mPrimaryItem = (Fragment) object;
        }
        @Override
        public int getCount() {
            return Math.min(mCutOffPage + 1, mCurrentPageSequence == null ? 1
                    : mCurrentPageSequence.size());
        }
        public void setCutOffPage(int cutOffPage) {
            if (cutOffPage < 0) {
                cutOffPage = Integer.MAX_VALUE;
            }
            mCutOffPage = cutOffPage;
        }
        public int getCutOffPage() {
            return mCutOffPage;
        }
        public Fragment getPrimaryItem() {
            return mPrimaryItem;
        }
    }
Second Pager Adapter "Iam not using this one in my code ."
adapter = new FragmentStatePagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                switch (position) {
//                    case 0 : return new FragmentOn1();
//                    case 1 : return new FragmentOn2();
//                    case 2 : return new FragmentOn3();
                    default: return null;
                }
            }
            @Override
            public int getCount() {
                return 3; // Hard coded 3, because we are displaying 3 fragments
            }
        };
3rd Fragment pager Adapter
  private class ViewPagerAdapter extends FragmentStatePagerAdapter {
        String user_id;
        private SparseArrayCompat<BInterfaceScrollTabHolder> mScrollTabHolders;
        private InterfaceScrollTabHolder mListener;
        public ViewPagerAdapter(FragmentManager fm, String user_id) {
            super(fm);
            this.user_id = user_id;
            mScrollTabHolders = new SparseArrayCompat<InterfaceScrollTabHolder>();
        }
        public void setTabHolderScrollingContent(BInterfaceScrollTabHolder listener) {
            mListener = listener;
        }
        public SparseArrayCompat<BInterfaceScrollTabHolder> getScrollTabHolders() {
            return mScrollTabHolders;
        }
        public Fragment getItem(int num) {
            FragmentScrollTabHolder fragment;
            if (num == 0) {
                fragment = FragmentActivities_.newInstance(this.user_id, num);
            } else if (num == 1) {
                fragment = FragmentFollowers_.newInstance(this.user_id, num);
            } else if (num == 2) {
                fragment = FragmentFollowing_.newInstance(this.user_id, num);
            } else {
                fragment = FragmentActivities_.newInstance(this.user_id, num);
            }
            mScrollTabHolders.put(num, fragment);
            if (mListener != null) {
                fragment.setScrollTabHolder(mListener);
            }
            return fragment;
        }
        @Override
        public int getCount() {
            return 3;
        }
        @Override
        public CharSequence getPageTitle(int position) {
            if (position == 0) {
                return "\nActivities";
            } else if (position == 1) {
                if (follower_count > 0) {
                    return follower_count + "\nFollowers";
                } else {
                    return "\nFollowers";
                }
            } else if (position == 2) {
                if (following_count > 0) {
                    return following_count + "\nFollowing";
                } else {
                    return "\nFollowing";
                }
            }
            return "\nActivities";
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
        }
    }
fourth pager apdapter .
public class BAdapterFragmentViewPager extends FragmentStatePagerAdapter{
SparseArray<Fragment> mPageReference = new SparseArray<Fragment>();
boolean tab_available ;
public BAdapterFragmentViewPager(FragmentManager fm ) {
        super(fm);
    }
public void setIs_contest_tab_available(boolean tab_available ) {
    this.tab_available = tab_available ;
    notifyDataSetChanged();
}
    @Override
    public Fragment getItem(int num) {
        Fragment fragment = null;
        if (num == 0) {
            fragment = FragmentGeneral_.newInstance();
        } else if(num == 1) {
            fragment = BFragmentSolvedCases_.newInstance();
        } else if(num == 2) {
            fragment = FragmentTrending_.newInstance();
        }else if(num == 3 && tab_available ){
            fragment = FragmentContest_.newInstance();
        }
        mPageReference.put(num, fragment);
        return fragment;
    }
    @Override
    public int getCount() {
        int size ;
        if(tab_available ) {
            size =  4;
        }else{
            size =  3;
        }
        return size ;
    }
    @Override
    public CharSequence getPageTitle(int position) {
        if (position == 0) {
            return "All";
        } else if (position == 1) {
            return "Solved";
        } else if (position == 2) {
            return "Trending";
        }else if( position == 3 && is_contest_tab_available){
            return "Contest";
        }
        return "All";
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    }
public Fragment getFragment(int key) {
    return mPageReference.get(key);
}
}
 
    