ViewModelProvider java.lang.ClassCastException при переходе с варианта отладки на вариант выпускаAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 ViewModelProvider java.lang.ClassCastException при переходе с варианта отладки на вариант выпуска

Сообщение Гость »


Я пытаюсь собрать приложение своей компании, но когда я меняю вариант сборки на выпуск (вариант меняет только файлы конфигурации проекта, такие как конечные точки и учетные данные), я получаю следующую ошибку:

ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс: com.timo.ecocloud.paciente, PID: 15435 java.lang.RuntimeException: невозможно начать действие ComponentInfo{com.timo.ecocloud.paciente/com.timo.ecocloudpaciente.ui.login.LoginActivity}: java.lang.ClassCastException в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3635) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792) в android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) в android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) в android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210) в android.os.Handler.dispatchMessage(Handler.java:106) в android.os.Looper.loopOnce(Looper.java:201) в android.os.Looper.loop(Looper.java:288) в android.app.ActivityThread.main(ActivityThread.java:7839) в java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Вызвано: java.lang.ClassCastException в android.support.v4.media.session.b.a(SourceFile:1) в j1.a.(SourceFile:1) по адресу com.timo.ecocloudpaciente.ui.login.f.a(SourceFile:1) в androidx.lifecycle.sb(SourceFile:1) в androidx.lifecycle.sa(SourceFile:1) на com.timo.ecocloudpaciente.ui.login.LoginActivity.onCreate (неизвестный источник: 68) в android.app.Activity.performCreate(Activity.java:8051) в android.app.Activity.performCreate(Activity.java:8031) в android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329) в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792) в android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) в android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) в android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210) в android.os.Handler.dispatchMessage(Handler.java:106) в android.os.Looper.loopOnce(Looper.java:201) в android.os.Looper.loop(Looper.java:288) в android.app.ActivityThread.main(ActivityThread.java:7839) в java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Вот фрагмент кода, который генерирует ошибку:

loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory()) .get(LoginViewModel.class); Я пробовал обновить все, даже используя более обновленную версию:

new ViewModelProvider(this, new LoginViewModelFactory()).get(LoginViewModel.class); Но пока ничего не помогло, кто-нибудь знал, как это решить?

Изменить: коды viewmodel, viewmodelfactory ниже: В активности (код, генерирующий ошибку)

loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory()) .get(LoginViewModel.class); LoginViewModel.java:

пакет com.timo.ecocloudpaciente.ui.login; импортировать android.app.Activity; импортировать android.util.Log; импортировать android.util.Patterns; импортировать androidx.lifecycle.LiveData; импортировать androidx.lifecycle.MutableLiveData; импортировать androidx.lifecycle.ViewModel; импортировать com.timo.ecocloudpaciente.data.LoginRepository; импортировать com.timo.ecocloudpaciente.R; импортировать com.timo.ecocloudpaciente.model.DefaultResponse; импортировать com.timo.ecocloudpaciente.model.DefaultResponseResult; импортировать com.timo.ecocloudpaciente.model.User; публичный класс LoginViewModel расширяет ViewModel { частный MutableLiveData loginFormState = новый MutableLiveData(); частный MutableLiveData RecoveryFormState = новый MutableLiveData(); частный MutableLiveData loginResult = новый MutableLiveData(); частный MutableLiveData defaultResult = новый MutableLiveData(); частный LoginRepository loginRepository; LoginViewModel (LoginRepository loginRepository) { this.loginRepository = loginRepository; } /** * Авторизоваться */ LiveData getLoginFormState() { вернуть логинформстате; } LiveData getLoginResult() { вернуть результат входа в систему; } public void login (имя пользователя String, пароль String) { // можно запустить в отдельном асинхронном задании loginRepository.login(имя пользователя, пароль, это); } public void loginDataChanged (имя пользователя String, пароль String) { если (!isUserNameValid(имя пользователя)) { loginFormState.setValue(new LoginFormState(R.string.login_invalid_username, null)); } else if (!isPasswordValid(пароль)) { loginFormState.setValue(new LoginFormState(null, R.string.login_invalid_password)); } еще { loginFormState.setValue(новый LoginFormState(true)); } } // Проверка имени пользователя-заполнителя частное логическое значение isUserNameValid(String username) { вернуть имя пользователя != null && !username.equals(""); } // Проверка пароля-заполнителя частное логическое значение isPasswordValid (строковый пароль) { вернуть пароль!= null && пароль.trim().length() == 6; } /** * Используется для обратного вызова */ public void onSuccess (пользователь-пользователь) { loginResult.setValue(новый LoginResult(пользователь)); } public void onError (String message) { loginResult.setValue(новый LoginResult(сообщение)); } /** * Восстановить пароль */ LiveData getRecoverFormState() { вернуть восстановлениеФормСостояние; } public void RecoveryDataChanged (String useremail) { если (!isEmailValid(useremail)) { RecoveryFormState.setValue(новый RecoverFormState(R.string.recover_invalid_email)); }еще { RecoveryFormState.setValue(новый RecoverFormState(true)); } } LiveData getDefaultResult() { вернуть результат по умолчанию; } public void RecoveryPwd (Activity Activity, LoginViewModel loginViewModel, String email) { loginRepository.recoverPwd(активность, loginViewModel, электронная почта); } частное логическое значение isEmailValid(String email){ if (email == null || email.trim().isEmpty()) вернуть ложь; если (email.contains("@")) вернуть Patterns.EMAIL_ADDRESS.matcher(email).matches(); еще вернуть ложь; } /** * Используется для обратного вызова */ public void defaultReturnOnSuccess (DefaultResponse defaultResponse) { defaultResult.setValue(новый DefaultResponseResult(defaultResponse, "")); } public void defaultReturnOnError (строковое сообщение) { defaultResult.setValue(новый DefaultResponseResult(сообщение)); } } LoginViewModelFactory.java
пакет com.timo.ecocloudpaciente.ui.login; импортировать androidx.lifecycle.ViewModel; импортировать androidx.lifecycle.ViewModelProvider; импортировать androidx.annotation.NonNull; импортировать com.timo.ecocloudpaciente.data.LoginDataSource; импортировать com.timo.ecocloudpaciente.data.LoginRepository; публичный класс LoginViewModelFactory реализует ViewModelProvider.Factory { @NonNull @Override @SuppressWarnings («не отмечено») public T create(@NonNull Class modelClass) { если (modelClass.isAssignableFrom(LoginViewModel.class)) { return (T) новая LoginViewModel(LoginRepository.getInstance(new LoginDataSource())); } еще { throw new IllegalArgumentException("Неизвестный класс ViewModel"); } } }
Ответить

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

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

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

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

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