'java.lang.String android.content.Context.getPackageName()' on a null object reference

异常:android.content.Context.getPackageName()' on a null object reference

代码:改方法是写在一个Fragment中

//onFalide方法是网络请求失败回调 
 @Override
            public void onFailed(int what, int responseCode, String errorMsg) {
                super.onFailed(what, responseCode, errorMsg);
                ...........
                if (responseCode == 1) {
               //延迟跳转到新的页面
                    ExThread.getInstance().executeByUIDelay(() -> {
                        Intent intent = new Intent(getContext(), CartActivity.class);
                        startActivity(intent);
                    }, 1000);
                }
            }

我们看下系统源码:

/**
     * Return the {@link Context} this fragment is currently associated with.
     */
    public Context getContext() {
        return mHost == null ? null : mHost.getContext();
    }

    /**
     * Return the {@link FragmentActivity} this fragment is currently associated with.
     * May return {@code null} if the fragment is associated with a {@link Context}
     * instead.
     */
    final public FragmentActivity getActivity() {
        return mHost == null ? null : (FragmentActivity) mHost.getActivity();
    }
// Host this fragment is attached to.
FragmentHostCallback mHost;  有可能为null  这个类我们可以认为他是用来管理Fragment生命周期,如果需要了解更多,自行百度学习。

原因:最常见是在 回调接口, 如网络请求回调,第三方登录回调 返回的时候 调用 context.startActivity 时 context 为空导致

解决方法:可以在 context 为空的时候使用 Application Context, 加上

if (!(context instanceof Activity)) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); }

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值