当前位置: 首页 > 知识库问答 >
问题:

Android.support.v4.app.FragmentManagerImpl catch NullPointerException?

姜俊逸
2023-03-14

我需要通过FragmentManagerImpl捕获NullPointerException。
但是尝试...catch不起作用。
如何在getItem()上捕获显式的NullPointerException?

.......
        try {
              pagerAdapter = new TFragmentPagerAdapter(getFragmentManager());
        } catch (Exception e) {
            Log.e(LOG_TAG, e.toString());
        }

..................

 private class TFragmentPagerAdapter extends FragmentPagerAdapter {

        public TFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {

            Fragment fragment = null;
            switch (training) {
                case VAR:
//                    fragment = getTFragment(position);
                    fragment = null;
                    break;
                default:
                    break;
            }

            if (fragment == null) {
                throw new RuntimeException();
            }

            return fragment;
        }
}

我看到堆栈跟踪

java.lang.NullPointerException:试图在Android.support.v4.view.viewPager.AddNewItem(ViewPager.java:8)的Android.support.v4.app.backStackRecord.doaddop(BackStackRecord.java:417)的Android.support.v4.app.backStackRecord.add(BackStackRecord.java:412)的Android.support.v4.app.fragmentPagerAdapter.InstantiateItem(FragentPagerAdapter.java:99)的69)在Android.support.v4.view.viewPager.populate(ViewPager.java:1019)在Android.support.v4.view.viewPager.populate(ViewPager.java:951)在Android.support.v4.view.viewPager.populate(ViewPager.java:951)在Android.support.v4.view.viewPager.onMeasure(ViewPager.java:1473)在Android.view.viewPager.measure(ViewPager.java:1473)在ChildWithMargins(ViewGroup.java:5535)在Android.widget.framelayout.onMeasur(framelayout.java:436)在Android.view.view.v4.widget.drawerlayout.measur(view.java:17547)在Android.support.v4.widget.drawerlayout.onMeasur(drawerlayout.java:868)在Android.view.view.view.view.java:17547)在Android.view.view.view.veasure(drawerlayout.measure(.view.measure(view.java:17547)在Android.view.viewgroup.measureChildWithMargins(viewgroup.java:5535)在Android.support.v7.internal.widget.actionBaroverlayLayout.onMeasure(actionBaroverlayLayout.java:444)在Android.view.view.viewgroup.measure(view.java:17547)在Android.view.viewgroup.measure(view.java:45)在35)在Android.widget.linearandroid.widget.linearlayout.java:1436)android.widget.linearlayout.measureVertical(linearlayout.java:722)android.widget.linearlayout.onMeasur(linearlayout.java:613)android.view.viewgroup.measur(view.java:17547)android.view.view.measur(view.java:17547)android.view.view.measury(viewgroup.onMe:17547)在Android.view.viewrootimpl.performMeasure(viewrootimpl.java:2015)在Android.view.viewrootimpl.measurierarchy(viewrootimpl.java:1173)在Android.view.viewrootimpl.performTraversals(viewrootimpl.java:1173)在Android.view.viewrootimpl.performTraversals(viewrootimpl.java:1379)在Android.view.viewrootimpl.doTraversal(choreographer.java:580)at和在Android.view.choreographer.doFrame(chorographer.java:550)在Android.view.choreographer$framedisplayEventReceiver.run(choreographer.java:753),在Android.os.handler.handleCallback(handler.java:739)在Android.os.handler.dispatchMessage(handler.java:95),在Android.app.activityThread.loop(looper.java:135),在Android.app.activityThread.main com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903),地址为com.android.internal.os.zygoteinit.main(zygoteinit.java:698)

共有1个答案

洪国兴
2023-03-14

你发布的代码基本有效。你的问题在别处。编辑您的文章,并向我们展示ActivityThread.java:5257的代码。

为了供您参考,这段代码显示了您在公共片段getItem(int位置)中尝试做的事情...抛出您想要的异常,并且它可以被捕获。

package org.jf;

public class SomeClass {

    public static void main(String[] args) {
        new SomeClass();
    }

    public SomeClass() {
        try {

            AClass x = new AClass();
            x.getItem(1);
        } catch (Exception e) {

            System.out.println("Caught");
        }
    }

    class AClass {
        public Object getItem(int position) {
            int training = 1;
            Object fragment = null;
            switch (training) {
                case 1:
//                    fragment = getTFragment(position);
                    fragment = null;
                    break;
                default:
                    break;
            }

            if (fragment == null) {
                throw new RuntimeException();
            }

            return fragment;
        }
    }
}
 类似资料:
  • 这就是我在添加“simple_permissions”包时看到的错误。我怎么才能修好这个?我最近升级了flutter,在升级之前它一直工作得很好。/root/flutter/.pub-cache/hosted/pub.dartlang.org/simple_permissions-0.1.9/android/src/main/java/com/ethras/simplepermission/sim

  • 问题内容: 我在测试应用程序时未在手机上找到它。为什么会发生这种情况,我该如何解决? 我还不知道,但我想我可以与有同样的问题 和如果他们这样做会引起其他问题。 我以前从未遇到过任何问题,但现在无法正常工作。我有android.support.v4 lib(可能是一个)。 编辑:更好的错误消息 我的错误 问题答案: 如果您最近更新了ADT,则库构建路径可能已被弄乱了。请尝试以下操作: 右键单击项目

  • 我使用的是Qt 5.4。我导入了SDK 实际上,我试图使用多行通知,我在java文件中使用了这一行: CustMainActivity.java: 我遇到一个错误:打包android。支持v4.app不存在 我阅读了它,并添加了android-support-v4。jar和android-support-v7-appcompat。但我不知道如何在Qt中修复它。

  • a/zygote:java_vm_ext.cc:534]JNI检测到应用程序中的错误:调用了JNI GetStaticMethodID,但出现挂起的异常java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件“/data/app/packageName-fnlt_hyr4uv4lfvitkfrgg==/base.apk”],NativeLibr

  • 我的谷歌pixel 2搭载android 9版本时突然崩溃。有没有任何提示,这背后的原因是什么,而且它不是每次都可以复制的。 详细日志... 在路径:DexPathList[[zip文件”/data/app/com.google.android.deskclock-o_Iury9TRKVebStZjRrd0g==/base.apk]上找不到类“android.support.v4.app.Core

  • 问题内容: 我收到以下错误: 当我运行一个项目时,正在使用Coursera上的Android手持式系统对移动应用程序进行编程。我认为此错误与我的输出答案被认为不正确有关。如果可以解决此错误,则可以修复输出。 最初运行测试时,我没有最新版本的Android支持存储库(未安装),但是现在我根据SDK Manager(v4)拥有最新版本的Android支持存储库,甚至重新启动了Eclipse和模拟器,但