Android java.lang.Class java.lang.Object.getClass();关于空对象引用
我尝试将viewPager与TableLayout一起使用,但当我使用viewPager设置适配器时,我得到错误“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.Class java.lang.Object.getClass()”我不明白为什么会显示此错误 查看寻呼机集适配器:Android java.lang.Class java.lang.Object.getClass();关于空对象引用,android,xml,nullpointerexception,android-viewpager,Android,Xml,Nullpointerexception,Android Viewpager,我尝试将viewPager与TableLayout一起使用,但当我使用viewPager设置适配器时,我得到错误“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.Class java.lang.Object.getClass()”我不明白为什么会显示此错误 查看寻呼机集适配器: viewPager= (ViewPager) findViewById(R.id.viewPager_id); viewPager.setAdapte
viewPager= (ViewPager) findViewById(R.id.viewPager_id);
viewPager.setAdapter(newViewPagerAdapterUseThisClass(getSupportFragmentManager(),14));
适配器CLS:
class ViewPagerAdapterUseThisClass extends FragmentPagerAdapter {
int countTabItem;
ViewPagerAdapterUseThisClass(FragmentManager fm,int contTabItem) {
super(fm);
this.countTabItem=contTabItem;
}
@Override
public Fragment getItem(int position) {
if(position==0){
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
return null;
}
@Override
public int getCount() {
return countTabItem;
}
}
查看寻呼机xml文件:
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tab_layout_id"
android:id="@+id/viewPager_id"/>
根据我看到的情况,您在该方法中返回null:
@Override
public Fragment getItem(int position) {
if(position==0){
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
return null;
}
返回所有计数。试试这个:
Override
public Fragment getItem(int position) {
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
当您在
getItem(int位置)
method ofPagerAdapter
处返回null
时,会发生此异常
必须在getCount()
方法处设置返回值(n),并在getItem(int位置)
方法处为所有(0..n-1)位置返回片段
例如,如果从getCount()
方法返回3,则必须为getItem(int位置)
方法处的位置0、1和2返回一个非空的片段。如果为位置0、1或2返回null,则将得到:
java.lang.NullPointerException:尝试调用虚拟方法
空对象上的“java.lang.Class java.lang.Object.getClass()”
参考文献
当返回的片段数少于指定的计数时,通常会出现此错误。例如,返回count=3,在第二个位置返回null。
请注意,count是一个从零开始的索引。尝试在getCount
docountofallfragments中这样做:比如1..5
public Fragment getItem(int position) {
if (position == 0) {
Tab1 tab1 = new Tab1();
return tab1;
}
if (position == 2) {
Tab2 tab2 = new Tab2();
return tab2;
} else {
Tab3 tab3 = new Tab3();
return tab3;
}
}
@Override
public int getCount() {
return 5; //her
}
只有当您尝试使用方法getCount()
返回的值大于在选项卡中初始化的值时,才会发生这种类型的异常。
更改返回值。碎片计数函数中返回null时出现问题
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new XFragment();
case 1:
return new YFragment();
case 2:
return new ZFragment();
default:
return null; // Problem occurs at this condition!
}
}
这里外括号出现错误
因此,上述答案是正确的,而且是有效的
public Fragment getItem(int position) {
if (position == 0) {
Tab1 tab1 = new Tab1();
return tab1;
}
if (position == 2) {
Tab2 tab2 = new Tab2();
return tab2;
} else {
Tab3 tab3 = new Tab3();
return tab3;
}
}
答案是正确的。我出现这个错误是因为我忘了设置break命令。首先检查您的中断操作员
现在我有了这个代码:
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FollowersFragment();
case 1:
return new PostsFragment();
case 2:
return new ReactsFragment();
case 3:
return new StoriesFragment();
case 4:
return new FollowersFragment();
case 5:
return new FollowersFragment();
case 6:
return new FollowersFragment();
}
return null;
}
只需使用下面给出的代码即可。它避免了空错误,运行平稳
@Override
public Fragment getItem(int position) {
return new Tab1( );
}
你告诉适配器它有14个项目,但除了位置0之外,所有项目都返回空值。对不起,这是我的错,谢谢@MikeM。问题在这里解决了吗?可能已经晚了,但我想问你怎么知道这是确切的原因?我只是想知道你是怎么知道确切的原因的。日志没有那么大帮助。@Ankur_009 FragmentPagerAdapter.InstanceItem(位于共享日志中)调用getItem方法。如果getItem返回空值,NPE就会发生。我认为根据我的理解,首先要检查Measue()->populate()->addNewItem()->InstanceItem()将调用getItem()。这就是你的思维过程?我对片段进行了空初始化。现在,这与原来的问题有什么关系?请提供更多的上下文我只是有同样的问题,该代码为我工作
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FollowersFragment();
case 1:
return new PostsFragment();
case 2:
return new ReactsFragment();
case 3:
return new StoriesFragment();
case 4:
return new FollowersFragment();
case 5:
return new FollowersFragment();
case 6:
return new FollowersFragment();
}
return null;
}
@Override
public Fragment getItem(int position) {
return new Tab1( );
}