Я получаю исключение java.lang.NullPointerException, чего, по моему мнению, не должно быть. Может ли кто-нибудь помочь мAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Я получаю исключение java.lang.NullPointerException, чего, по моему мнению, не должно быть. Может ли кто-нибудь помочь м

Сообщение Anonymous »

У меня есть интерфейс, который передается в модель представления из действия, в котором он реализован. Затем в модели представления он вызывает реализованный метод интерфейса. Внутри этого метода все, что я хочу сделать, это отобразить Toast, но я получаю нулевую ошибку при попытке доступа к контексту активности. Я не понимаю, почему.
Для ясности: внутри всех других переопределенных методов, таких как onCreate, onStop, OnResume и т. д. Если я показываю всплывающее уведомление, оно работает нормально. Только когда внутри этого метода интерфейса контекст активности кажется нулевым. Понятия не имею.
Это модуль рукояти
@Module
@InstallIn(SingletonComponent::class)
abstract class ToastListenerModule {
@Binds
abstract fun bindToastMessageListener(activity: SplashActivity): ToastMessageListener
}

Мой SplashActivity.kt
@AndroidEntryPoint
class SplashActivity @Inject constructor() : AppCompatActivity(), ToastMessageListener {
private lateinit var binding: ActivitySplashBinding

@Inject
lateinit var auth: FirebaseAuth

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
installSplashScreen()
binding = ActivitySplashBinding.inflate(layoutInflater)

setContentView(binding.root)
}

override fun showToast(message: String) {
//THIS IS WHERE THE PROBLEM IS WITH THE CONTEXT
Toast.makeText(this, "MESSAGE", Toast.LENGTH_SHORT)
}
}

Ниже у меня есть моя ViewModel:
@HiltViewModel
class AuthenticationViewModel @Inject constructor(
private val auth: FirebaseAuth,
private val toastListner: ToastMessageListener,
) : ViewModel() {
val emailText = ObservableField("")
val passwordText = ObservableField("")
val nameText = ObservableField("")

fun onSubmitClicked(isLogin: Boolean) {
if (isLogin) {
val email = emailText.get()
val password = passwordText.get()

if (email.isNullOrEmpty() || password.isNullOrEmpty()) {
println("Email or password is empty")
return
}
auth.signInWithEmailAndPassword(emailText.get() ?: "", passwordText.get() ?: "")
.addOnCompleteListener() { task ->
if (task.isSuccessful) {
toastListner.showToast("Login Successful")
} else {
val exception = task.exception
//THIS IS WHERE I CALL showToast
//AND YES IT IS GETTING CALLED AND EVERYTHING
toastListner.showToast("Login Failed: ${exception?.message}")
}
}
} else {
println("SIGN Up BUTTON CLICKED ${emailText.get()} ${passwordText.get()}")
}
}

fun isValidInput(): Boolean {
val inputEm = emailText.get() ?: return false
val inputPass = passwordText.get() ?: return false

return inputEm.isNotEmpty() && inputPass.isNotEmpty()
}
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... e-the-case
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»