NullPointerException:空对象引用上的 android.support.v4.app.FragmentHostCallback.getHandler()

Posted

技术标签:

【中文标题】NullPointerException:空对象引用上的 android.support.v4.app.FragmentHostCallback.getHandler()【英文标题】:NullPointerException: android.support.v4.app.FragmentHostCallback.getHandler() on a null object reference 【发布时间】:2017-05-17 10:18:12 【问题描述】:

我面临以下问题。

场景:

当我第一次通过应用程序注册时,我能够看到选项卡和内容,但是当我注销并尝试登录 viewpager 的相同代码时,我得到以下异常:

NullPointerException:尝试调用虚方法 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' 为空 对象引用

但是当打开导航菜单并选择之后,我会显示数据和选项卡 viewpager 显示选项卡。

内容: 我有 2 个标签

下面是我的代码:

 public void setupDashboardTabs(List<CreateFragmentsPojo> fragments) 
    this.fragments = fragments;

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    viewPager.setOffscreenPageLimit(3);

    setupDashboardViewPager(fragments);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

    setUpFontStyleForTabs();



public void setupDashboardViewPager(List<CreateFragmentsPojo> fragments) 
    try 
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

        for (int i = 0; i < fragments.size(); i++) 
            adapter.addFragment(fragments.get(i).getFragment(), fragments.get(i).getTitle());
        
        viewPager.setAdapter(adapter);
     catch (Exception e) 
        e.printStackTrace();
    

viewPager.setAdapter(适配器); 在这一行获取空指针执行

注销代码:

 Intent intent = new Intent(this, LoginActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    finish();

堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference
 W/System.err:     at android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:1949)
 W/System.err:     at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1965)
 W/System.err:     at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620)
 W/System.err:     at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166)
 W/System.err:     at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:513)
 W/System.err:     at io.skreem.dashboard.DashboardActivity.setupDashboardViewPager(DashboardActivity.java:459)
 W/System.err:     at io.skreem.dashboard.DashboardActivity.setupDashboardTabs(DashboardActivity.java:443)
 W/System.err:     at io.skreem.dashboard.DashboardActivity$4.onResponse(DashboardActivity.java:408)
 W/System.err:     at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
 W/System.err:     at android.os.Handler.handleCallback(Handler.java:746)
 W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
 W/System.err:     at android.os.Looper.loop(Looper.java:148)
 W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5443)
 W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
 W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
 W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

【问题讨论】:

What is a NullPointerException, and how do I fix it?的可能重复 没有帮助 修复此错误是否成功?我有时也面临同样的问题 是的,我已经修好了。 我做了同样的工作。 【参考方案1】:

viewPager.setOffscreenPageLimit(3);

是问题所在。因为你有 2 个标签。这意味着 2 页,但您强制 3 作为 PageLimit。还有什么需要向适配器添加片段?

【讨论】:

嘿嘿,Adapter是用来展示片段的。 setOffscreenPageLimit(3) 用于其他选项卡,这应该不是问题,因为它可以与其他选项卡一起使用【参考方案2】:

我有同样的问题,它是由片段的不同实例重用 ViewPager 实例引起的。在第二次调用ViewPager.setAdapter() 后出现异常。如果这是您遇到的问题,您可以尝试我使用的解决方案。为了解决这个问题,我必须在我的片段的onDestroyView() 方法中删除适配器。

项目演示问题和解决方案can be found here。

【讨论】:

【参考方案3】:

删除 super.onBackPressed() 并调用 finish()

@Override
public void onBackPressed() 
//     super.onBackPressed();
       finish();
  

我不知道为什么,但这对我来说有效!

【讨论】:

以上是关于NullPointerException:空对象引用上的 android.support.v4.app.FragmentHostCallback.getHandler()的主要内容,如果未能解决你的问题,请参考以下文章

YouTube 播放器崩溃(java.lang.NullPointerException,空对象引用)

NullPointerException 错误尝试在空对象引用上调用虚拟方法错误

非空对象上的Android java.lang.NullPointerException [重复]

NullPointerException 尝试在空对象引用上调用 method.GoogleMap.setMapType(int)'

数据库错误:“NullPointerException:尝试在空对象引用上调用虚拟方法 getApplicationInfo()...”[重复]

NullPointerException