Намерение создает нулевую ссылку на объект при переходе от действия splash к основному действию

#android #android-studio #android-intent

#Android #android-studio #android-намерение

Вопрос:

Раньше все работало нормально, и теперь, когда я запускаю свое приложение, оно начинает выдавать эту ошибку, и мое приложение продолжает сбой.

Эта ошибка продолжает поступать

android.content.Намерение android.content.Intent.putExtra(java.lang.Строка, int)’ для ссылки на нулевой объект

Вот мой код действия Splash.

Код метода Oncreate приведен ниже

@Override protected аннулирует 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, то намерение перейдет к регистрации действия

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

}
  

Комментарии:

1. я применил недействительные перехваты и перезапустил, но результата по-прежнему нет.

2. redirectingIntent не инициализируется. Проверьте свои условия и убедитесь, что redirectingIntent инициализировано до выполнения обработчика.

3. Спасибо за помощь, ошибка теперь удалена.

Ответ №1:

 //update by this

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

    }, 3000);
  

Ответ №2:

Во-первых, я бы избегал отложенного обработчика, поскольку он подвержен ошибкам; точнее, этот код

 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();
    }
}
  

Комментарии:

1. Я использую отложенный обработчик () только из-за заставки.