当前位置: 首页 > 知识库问答 >
问题:

意图在从初始活动移动到主活动时生成空对象引用

龙永逸
2023-03-14

以前一切正常,现在当我运行我的应用程序时,它开始产生这个错误,我的应用程序一直在崩溃。

此错误不断出现

android.content.Intentandroid.content.ntent.putExtra(java.lang.String, int)'对空对象引用

这是我的飞溅活动代码。

Oncreate方法代码如下

@重写受保护的void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        FirebaseApp.initializeApp(SplashActivity.this);

        fragmentKey=0;
        intiViews();

        new Handler().postDelayed(() -> {

            redirectingIntent.putExtra("fragmentKey", fragmentKey);
            startActivity(redirectingIntent);
            finish();

        }, 3000);

InitViews方法代码如下所示

    private void intiViews() {
        userRef = FirebaseDatabase.getInstance().getReference(Common.USER_REF);

        mAuth = FirebaseAuth.getInstance();

        //Check User if it exist
        if (mAuth.getCurrentUser() != null) {
            user = mAuth.getCurrentUser();
            CheckUserFromFirebase(user);
        } else {
            redirectingIntent = new Intent(SplashActivity.this, RegisterActivity.class);
            fragmentKey = 0;
        }

    }

    private void CheckUserFromFirebase(final FirebaseUser user) {
        userRef.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()) {

                    UserModel userModel = dataSnapshot.getValue(UserModel.class);
                    updateUser(userModel);
                    redirectingIntent = new Intent(SplashActivity.this, MainActivity.class);
                    fragmentKey = 0;
                } else {
                    RegisterUser();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(SplashActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

在这里,我使用上载到firebase的用户模型更新我的用户

    private void updateUser(UserModel model) {
        Common.CurrentUser = model;
        Common.CurrentUser.setUid(user.getUid());
    }

如果给定uid没有注册用户,则intent将转到注册活动

    private void RegisterUser() {
        Toast.makeText(this, "No Data found", Toast.LENGTH_SHORT).show();
        redirectingIntent = new Intent(SplashActivity.this, RegisterActivity.class);
        fragmentKey = 1;
    }

}

共有2个答案

澹台权
2023-03-14

首先,我会避免延迟处理程序,因为它容易出错;更确切地说,此代码

new Handler().postDelayed(() -> {

        redirectingIntent.putExtra("fragmentKey", fragmentKey);
        startActivity(redirectingIntent);
        finish();

}, 3000);

我会制作另一种方法来处理重定向,并在需要时随时调用它

private void redirectToNextActivity(fragmentKey: Integer) {
    if (redirectingIntent != null ) {
        redirectingIntent.putExtra("fragmentKey", fragmentKey);
        startActivity(redirectingIntent);
        finish();
    }
}
童冠玉
2023-03-14
//update by this

 new Handler().postDelayed(() -> {
        if(redirectingIntent != null && fragmentKey != null)    
        {
            redirectingIntent.putExtra("fragmentKey", fragmentKey);
            startActivity(redirectingIntent);
            finish();
        }

    }, 3000);
 类似资料:
  • 我有3个活动A、B和C。A导致B,B导致C。我希望能够在A和B之间来回移动,但我希望在C开始后完成A和B。我知道如何在通过意图启动C时关闭B,但在启动C时如何关闭A?

  • 我想把意图转移到Xamarin.Android中的另一个活动。基本上,我需要Intent.data和Intent.clipdata到另一个活动,所以我使用下面的代码来传输Intent,但我不知道检索它的正确方法。 下面是Main Activity中的代码 在第二活动中 如何在第二个活动中检索意图?

  • 最近一个面试官问了我一个很棘手的问题。这个问题有几个部分。 为什么(问题是为什么,而不是如何)需要在从一个活动发送到另一个活动时打包对象,而不是直接发送 我给的答案- Parcelable为开发人员提供了限制对象创建的能力,这在某种程度上使其使用速度更快。 我没有得到任何有用的链接后,谷歌,而且我或面试官不太满意的答案。如果你们能帮忙,那就太好了!

  • //使用startActivity(intent)也不起作用//无论我做什么,应用程序都会崩溃

  • 下面的第一个代码块是我的主要活动,我在其中创建了第二个活动的意图。在这个活动中,我将在列表视图中显示费用,因为它还没有完全实现,所以我暂时忽略了它。我想做的就是启动第二个活动,让用户输入详细信息,然后按下一个按钮将活动添加到列表视图中。@override公共布尔onOptionsItemSelected(MenuItem item){int id=item.getItemId(); 这是用户输入数

  • 问题内容: 我对android非常陌生,我正在尝试将用户输入的数据(他们的名字)发送到另一个活动。过去,我可以使用Intent在活动之间发送单行代码,但是我无法解决如何向两个不同的TextView发送两个不同的字符串。 这是到目前为止我的MainActivity代码: 我第二项活动MainGame的代码: 当我运行它时,我得到了两个TextView中都为“ name2”添加的内容。我需要做些什么来