【问题标题】:Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName() on getActivity()尝试在 getActivity() 上调用虚拟方法 'java.lang.String android.content.Context.getPackageName()
【发布时间】:2018-05-12 19:34:45
【问题描述】:

当我尝试在 Fragment 类上创建意图以移动我的活动页面 HomeScreenActivity 时,

Intent intent = new Intent(getActivity(), HomeScreenActivity.class);
startActivity(intent);
getActivity().finish(); 

我在Fabric 上收到以下错误Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference。我在操作系统版本为 7Galaxy S7 Edge 上收到此错误。在执行Intent intent = new Intent(getActivity(), HomeScreenActivity.class); 行时(LoginFragment.java 上的行号338

这是我从Fabric 得到的完整日志,

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
       at android.content.ComponentName.<init>(ComponentName.java:128)
       at android.content.Intent.<init>(Intent.java:5359)
       at com.example.android.fragments.LoginFragment.handleValidateEmployeeResponse(LoginFragment.java:338)
       at com.example.android.fragments.LoginFragment.access$100(LoginFragment.java:53)
       at com.example.android.fragments.LoginFragment$3.onResponse(LoginFragment.java:249)
       at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6692)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

【问题讨论】:

标签: android android-fragments android-intent android-activity nullpointerexception


【解决方案1】:

尝试使用attach方法

public Activity mActivity;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.mActivity = activity;
}

并像这样使用

Intent intent = new Intent(mActivity, HomeScreenActivity.class);
startActivity(intent);
mActivity.finish();

【讨论】:

  • 让我试试这个方法。
  • 祝你好运。@SHIDHIN.T.S
【解决方案2】:

我做了这样的事情,

Activity参考点赞

MainActivity activity = (MainActivity) getActivity();

然后将对象传递到你想要的地方,比如

Intent intent = new Intent(activity , HomeScreenActivity.class);
activity.finish();

【讨论】:

  • getActivity() 仍将返回 null,具体取决于它的使用位置
猜你喜欢
  • 1970-01-01
  • 2017-09-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2023-03-28
  • 2015-12-10
相关资源
最近更新 更多