2017-02-16 34 views
0

有人可以解释我为什么有时会发生这种异常?为什么一个班级成员在Android中失去了价值?

异常显示java.lang.NullPointerException:尝试上的空对象引用

ChannelEPGF $ myPagerAdapter.getItem(ChannelEPGF.java:82)调用虚拟方法 '长java.util.Date.getTime()'(找到“//这是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在这里为空 –

+0

你忘记了在你的else语句中启动selectedDate –

+0

它在pos == 0,1,2时启动。该代码99.999%的作品。我只通过firebase/crashreporting得到了这个异常。 – RuntimeError

回答

0

你不分配值selecte d日期,并且这会导致空指针异常,您可以看到您在除npe之外的所有情况下都这样做

+0

我会尝试将代码更改为selectedDate = new Date(); selectedDate.setTime(selectedDate.getTime())+ 24 * 3600 * 1000 *(pos-1)); – RuntimeError

相关问题