0

Can someone explain me why can sometimes this exception happen?

Exception java.lang.NullPointerException: Attempt to invoke virtual method 'long java.util.Date.getTime()' on a null object reference

ChannelEPGF$myPagerAdapter.getItem (ChannelEPGF.java:82) (find the "//THIS IS THE 82. rows" text in my code)

here is my code:

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import com.mp.myapp.DataTypes.ChannelEPG;
    import java.util.Date;

    public class ChannelEPGF extends Fragment implements ChannelEPG.fragmentCommunicator {
    private Date selectedDate;
    private String channelId;
    private String channelTitle;
    private ViewPager pager;
    private boolean isTunable;

    @Override
    public void sendMessage(String name, Object msg) {
            if (msg != null) {
                    ChannelEPG item = (ChannelEPG) msg;
                    channelId = item.GetId();
                    channelTitle = item.GetTitle();
                    isTunable = item.GetTunable();
            } else {
                    pager.getAdapter().notifyDataSetChanged();
            }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.activity_channel_epgf, container, false);

            pager = (ViewPager) v.findViewById(R.id.viewPager);
            if (pager != null) {
                    pager.setAdapter(new myPagerAdapter(getChildFragmentManager()));
                    pager.setCurrentItem(1);
            }

            return v;
    }

    private class myPagerAdapter extends FragmentPagerAdapter {

            public myPagerAdapter(FragmentManager fm) {
                    super(fm);
            }

            @Override
            public Fragment getItem(int pos) {
                    if (pos == 0) {
                            selectedDate = new Date();
                            selectedDate.setTime(selectedDate.getTime() - 24 * 3600 * 1000);
                            return ActivityChannelEPG.newInstance(selectedDate, channelId, channelTitle, isTunable);
                    } else if (pos == 1) {
                            selectedDate = new Date();
                            return ActivityChannelEPG.newInstance(selectedDate, channelId, channelTitle, isTunable);
                    } else if (pos == 2) {
                            selectedDate = new Date();
                            selectedDate.setTime(selectedDate.getTime() + 24 * 3600 * 1000);
                            return ActivityChannelEPG.newInstance(selectedDate, channelId, channelTitle, isTunable);
                    } else {
                            selectedDate.setTime(selectedDate.getTime() + 24 * 3600 * 1000); //THIS IS THE 82. rows
                            return ActivityChannelEPG.newInstance(selectedDate, channelId, channelTitle, isTunable);
                    }
            }

            @Override
            public int getCount() {
                    return 8;
            }

            public int getItemPosition(Object object) {
                    return POSITION_NONE;
            }
    }

}

1 Answers1

0

You does not assign value to selected date, and this causes null pointer exception, you can see that you are doing this in all cases except one where npe is thrown

Dmytro Grynets
  • 923
  • 11
  • 29
  • I will try to change the code to selectedDate = new Date(); selectedDate.setTime(selectedDate.getTime() + 24 * 3600 * 1000 * (pos -1)); – RuntimeError Feb 16 '17 at 08:28