2017-02-16 2 views
0

Может кто-нибудь объяснить мне, почему иногда это исключение случается?Почему член класса потерял свою ценность в Android?

Исключение java.lang.NullPointerException: Попытка вызвать виртуальный метод 'долго java.util.Date.getTime()' на нулевой ссылки на объект

ChannelEPGF $ myPagerAdapter.getItem (ChannelEPGF.java:82) (найти "// эТО 82. строки" текст в моем коде)

вот мой код:

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

'} else { selectedDate.setTime (selectedDate.getTime() + 24 * 3600 * 1000); 'selectedDate is null здесь –

+0

Вы забыли initiate selectedDate в своем заявлении else –

+0

Инициируется, когда pos == 0,1,2. Код 99.999% работает. Я получил это исключение с помощью firebase/crashreporting только сразу. – RuntimeError

ответ

0

Вы не присвоить значение selecte d date, и это вызывает исключение нулевого указателя, вы можете видеть, что вы делаете это во всех случаях, кроме одного, где npe выбрано

+0

Я попытаюсь изменить код на selectedDate = new Date(); selectedDate.setTime (selectedDate.getTime() + 24 * 3600 * 1000 * (pos -1)); – RuntimeError

Смежные вопросы