2017-02-16 63 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

相關問題