#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. Я использую отложенный обработчик () только из-за заставки.