Java 空对象引用上的android.content.Context.getPackageName()

Java 空对象引用上的android.content.Context.getPackageName(),java,android-studio,android-fragments,android-activity,nullpointerexception,Java,Android Studio,Android Fragments,Android Activity,Nullpointerexception,我在从片段转换到活动时遇到此错误,如下所示: 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:13

我在从片段转换到活动时遇到此错误,如下所示:

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)

到目前为止,我还没有看到任何在线解决方案。

请尝试使用getContext的getActivity intsead

我使用此代码处理片段事务

private Context context;

context.startActivity(new Intent(context, MainActivity.class)); 
Intent mainIntent = new Intent (getActivity(), 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);

因为您是从片段调用的,所以应该在这里使用getActivity而不是getContext

Intent mainIntent = new Intent (getActivity(), MainActivity.class);
        mainIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity (mainIntent);

我希望这会有所帮助。

我已经找到了解决这一问题的方法。我意识到我得到了错误,因为我正在firebase OnCompleteListener中创建新的意图,如下所示。因此,当我从监听器内部移除它并在外部调用它后,我的程序正常工作

相反,我创建了一个全局布尔变量,在成功存储数据时更新为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数据库上的用户状态。因此,每当我尝试移动到管理它的主活动时,它们都会导致android.content.Context.getPackageName出现空对象引用错误。如果我使用片段转换移动到另一个片段,那么main活动将被超过两次。在停止覆盖它们之后,我的应用程序工作正常。如果有人能解释为什么会这样,那就太好了


有时startActivity方法会引发如下异常:

从活动上下文外部调用startActivity需要 标志\u活动\u新建\u任务标志。这真的是你想要的吗

因此,您应该尝试intent.setFlagsInt.FLAG_活动_新任务方法

在创建intent时这样做。
   @Override
        public void onStart() {
            super.onStart();
    updateUserState("Online");
        }
@Override
        public void onResume() {
            super.onResume();
    updateUserState("Online");
        }