У меня есть интерфейс, который передается в модель представления из действия, в котором он реализован. Затем в модели представления он вызывает реализованный метод интерфейса. Внутри этого метода все, что я хочу сделать, это отобразить 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
Я получаю исключение java.lang.NullPointerException, чего, по моему мнению, не должно быть. Может ли кто-нибудь помочь м ⇐ Android
Форум для тех, кто программирует под Android
1715841359
Anonymous
У меня есть интерфейс, который передается в модель представления из действия, в котором он реализован. Затем в модели представления он вызывает реализованный метод интерфейса. Внутри этого метода все, что я хочу сделать, это отобразить Toast, но я получаю нулевую ошибку при попытке доступа к контексту активности. Я не понимаю, почему.
Для ясности: внутри всех других переопределенных методов, таких как onCreate, onStop, OnResume и т. д. Если я показываю всплывающее уведомление, оно работает нормально. Только когда внутри этого метода интерфейса контекст активности кажется нулевым. Понятия не имею.
Это модуль рукояти
@Module
@InstallIn(SingletonComponent::class)
abstract class ToastListenerModule {
@Binds
abstract fun bindToastMessageListener(activity: SplashActivity): ToastMessageListener
}
[b]Мой SplashActivity.kt[/b]
@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()
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78487936/i-am-getting-java-lang-nullpointerexception-which-i-think-should-not-be-the-case[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия