首页 > 解决方案 > Android中的空指针异常问题

问题描述

这是错误

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 24397
    java.lang.NullPointerException
        at com.example.myapplication.ui.main.SectionsPagerAdapter.getItem(SectionsPagerAdapter.kt:43)
        at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:105)
        at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:24530)

这是我认为有问题的代码

FragmentPagerAdapter

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }

    final long itemId = getItemId(position);

    // Do we already have this fragment?
    String name = makeFragmentName(container.getId(), itemId);
    Fragment fragment = mFragmentManager.findFragmentByTag(name);
    if (fragment != null) {
        if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
        mCurTransaction.attach(fragment);
    } else {
        fragment = getItem(position);
        if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);
        mCurTransaction.add(container.getId(), fragment,
                makeFragmentName(container.getId(), itemId));
    }
    if (fragment != mCurrentPrimaryItem) {
        fragment.setMenuVisibility(false);
        fragment.setUserVisibleHint(false);
    }

    return fragment;
}

SectionsPagerAdapter

override fun getItem(position: Int): Fragment {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return when(position){
            1 -> input
            2 -> history
            3 -> chart
            else -> throw NullPointerException()
        }
    }

我的片段可以返回一个空片段,所以我在 PagerAdapter 中创建了 NullPointerException。有人可以帮助我为什么我得到 NullPointerException 吗?非常感谢

标签: javaandroidkotlin

解决方案


position0从而不是开始1。试试下面:

override fun getItem(position: Int): Fragment {

    return when(position){
        0 -> input
        1 -> history
        2 -> chart
        else -> throw NullPointerException()
    }
}

getCount也应该回来3

override fun getCount(): Int {
    return 3
}

推荐阅读