[英]app crash with android.content.Context.getPackageName()' on a null object reference
[英]android.content.Context.getPackageName() on a null object reference
从片段转换到活动时出现此错误,如下所示:
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:130) at android.content.Intent.<init>(Intent.java:6108)
下面是我进入下一个活动的代码,错误发生在下面代码的第一行。
Intent mainIntent = new Intent (getContext(), MainActivity.class);
mainIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity (mainIntent);
到目前为止,我在网上没有看到任何解决方案。
似乎你得到了一个错误的上下文,引发了这个NullPointerException
尝试替换以下行:
Intent mainIntent = new Intent (getContext(), MainActivity.class);
与:>>如果您在活动中
Intent mainIntent = new Intent (this, MainActivity.class);
与:>>如果您在活动中的回调侦听器中
Intent mainIntent = new Intent (MyActivityName.this, MainActivity.class);
与:>>如果你在一个片段内
Intent mainIntent = new Intent (requireActivity(), MainActivity.class);
请尝试使用 getContext() 的 getActivity() intsead
我使用此代码处理片段的事务
private Context context;
context.startActivity(new Intent(context, MainActivity.class));
我已经能够找到解决这个问题的方法。 我意识到我收到了错误,因为我正在 firebase OnCompleteListener 中创建新 Intent,如下所示。 所以在我从监听器内部删除它并在外面调用它之后,我的程序可以正常工作。
相反,我创建了一个全局 boolean 变量,我在成功存储数据时将其更新为 true。 然后我可以在其他地方访问它,然后如果为真则转换到另一个地方。
#BEFORE
PostsRef.child(key).updateChildren(postsMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(getActivity(), "New Post is updated successfully.", Toast.LENGTH_SHORT).show();
Intent mainIntent = new Intent (getActivity(), MainActivity.class);
mainIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity (mainIntent);
} else {
Toast.makeText(context, "Error occured while updating your post.", Toast.LENGTH_SHORT).show();
}
}
});
#AFTER
PostsRef.child(key).updateChildren(postsMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mSuccess = true;
Toast.makeText(getActivity(), "New Post is updated successfully.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Error occured while updating your post.", Toast.LENGTH_SHORT).show();
}
}
});
大家好,我也意识到这个错误的主要原因之一是生命周期方法。所以我在我的片段中覆盖它们以更新 firebase 数据库上的用户 state。 因此,每当我尝试转到管理它的主要活动时,它们android.content.Context.getPackageName() on a null object reference
错误。 如果我使用片段转换移动到另一个片段,则 MainActivity 将被执行两次以上。 停止覆盖它们后,我的应用程序正常工作。 如果有人能解释为什么会发生这种情况,那就太好了。
@Override
public void onStart() {
super.onStart();
updateUserState("Online");
}
@Override
public void onResume() {
super.onResume();
updateUserState("Online");
}
由于您是从Fragment调用的,因此您应该在此处使用getActivity()而不是 getContext()
Intent mainIntent = new Intent (getActivity(), MainActivity.class);
mainIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity (mainIntent);
我希望这应该会有所帮助。
有时 startActivity 方法会抛出一个异常,例如:
从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。 这真的是你想要的吗?
所以你应该intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.