【发布时间】:2017-03-19 17:31:33
【问题描述】:
当我运行这部分代码时,我得到了 IndexOutOfBoundException,因为课程哈希图是空的。我在调试器中检查了它。你能解释一下为什么它是空的吗?我正在用数据填充它,但它不能正常工作。
public class ScheduleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.schedule_activity);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new SchedulePagerAdapter(getFragmentManager()));
}
}
class SchedulePagerAdapter extends FragmentPagerAdapter {
public SchedulePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return DayFragment.newInstance();
}
@Override
public CharSequence getPageTitle(int position) {
ArrayList<String> arrayList = new ArrayList<>();
for (String key : LessonsMap.lessons.keySet()) {
arrayList.add(key);
}
return arrayList.get(position);
}
@Override
public int getCount() {
return 6;
}
}
class LessonsMap {
public static Map<String, String> lessons = new HashMap<String, String>();
public LessonsMap() {
lessons.put("Monday", "Test_Data");
lessons.put("Tuesday", "Test_Data");
lessons.put("Wednesday", "Test_Data");
lessons.put("Thursday", "Test_Data");
lessons.put("Friday", "Test_Data");
lessons.put("Saturday", "Test_Data");
}
}
谢谢!
【问题讨论】:
-
lessons在您执行LessonsMap.lessons.keySet()时尚未填充数据,因为它是一个静态字段,您正在构造函数中填充它。要使其工作,您应该在static块内的LessonsMap类中初始化lessons映射。 @ArolaAb 答案也是有效的。 -
侧鼻:首先不要使用静态。实例化真实对象;并在这些对象上调用方法。
标签: java android hashmap indexoutofboundsexception