day2_commit_4_UI_fixed_crash_app_when_backend_off
This commit is contained in:
parent
102b9073c4
commit
1a887da8c7
82
.kotlin/errors/errors-1739952536870.log
Normal file
82
.kotlin/errors/errors-1739952536870.log
Normal file
@ -0,0 +1,82 @@
|
||||
kotlin version: 2.0.21
|
||||
error message: Daemon compilation failed: null
|
||||
java.lang.Exception
|
||||
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69)
|
||||
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:240)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:76)
|
||||
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
|
||||
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
|
||||
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
|
||||
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
|
||||
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:195)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:128)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:170)
|
||||
at org.gradle.internal.Factories$1.create(Factories.java:31)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:267)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:131)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:136)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:165)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:134)
|
||||
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
|
||||
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
|
||||
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
|
||||
at java.base/java.lang.Thread.run(Unknown Source)
|
||||
Caused by: java.nio.file.DirectoryNotEmptyException: C:\Users\User\AppData\Local\Temp\kotlin-backups14802231755905846813
|
||||
at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
|
||||
at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
|
||||
at java.base/java.nio.file.Files.delete(Unknown Source)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash$lambda$11$lambda$10$lambda$9(CompilationTransaction.kt:244)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
|
||||
at java.base/java.util.ArrayList.forEach(Unknown Source)
|
||||
at java.base/java.util.stream.SortedOps$RefSortingSink.end(Unknown Source)
|
||||
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
|
||||
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.close(CompilationTransaction.kt:254)
|
||||
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:747)
|
||||
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:120)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:675)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:92)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1660)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
|
||||
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
|
||||
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
|
||||
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport.serviceCall(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source)
|
||||
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
|
||||
... 3 more
|
||||
|
||||
|
@ -23,13 +23,26 @@ class MainViewModel @Inject constructor(
|
||||
|
||||
private fun loadUserData() {
|
||||
viewModelScope.launch {
|
||||
val login = SessionManager.userLogin
|
||||
if (login != null) {
|
||||
val response = apiService.getUserInfo(login)
|
||||
if (response.isSuccessful) {
|
||||
_userInfoState.value = response.body()
|
||||
try {
|
||||
val login = SessionManager.userLogin
|
||||
if (login != null) {
|
||||
val response = apiService.getUserInfo(login)
|
||||
if (response.isSuccessful) {
|
||||
_userInfoState.value = response.body()
|
||||
} else {
|
||||
// Обработка ошибки, если ответ не успешен
|
||||
_userInfoState.value = null // Или установите какое-то состояние ошибки
|
||||
}
|
||||
} else {
|
||||
// Логин равен null, обработайте это состояние
|
||||
_userInfoState.value = null // Или установите какое-то состояние ошибки
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
// Логирование ошибки
|
||||
e.printStackTrace()
|
||||
// Установите состояние ошибки
|
||||
_userInfoState.value = null // Или установите какое-то состояние ошибки
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ import android.text.TextWatcher
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
@ -83,19 +84,35 @@ class LoginFragment : Fragment(R.layout.fragment_login) {
|
||||
viewModel.state.collectWhenStarted(this) { state ->
|
||||
binding.loading.visibleOrGone(false)
|
||||
|
||||
if (state.error != null) {
|
||||
binding.error.text = state.error
|
||||
binding.error.visibility = View.VISIBLE
|
||||
} else if (state.success) {
|
||||
binding.error.visibility = View.GONE
|
||||
authPreferences.saveLoginState(true)
|
||||
authPreferences.saveLogin(binding.username.text.toString()) // Сохраняем логин
|
||||
Toast.makeText(context, "Авторизация прошла успешно", Toast.LENGTH_SHORT).show()
|
||||
navigateToMainScreen()
|
||||
try {
|
||||
if (state.maintenance) {
|
||||
showMaintenanceDialog() // Показываем диалог о техработах
|
||||
} else if (state.error != null) {
|
||||
binding.error.text = state.error
|
||||
binding.error.visibility = View.VISIBLE
|
||||
} else if (state.success) {
|
||||
binding.error.visibility = View.GONE
|
||||
authPreferences.saveLoginState(true)
|
||||
authPreferences.saveLogin(binding.username.text.toString()) // Сохраняем логин
|
||||
Toast.makeText(context, "Авторизация прошла успешно", Toast.LENGTH_SHORT).show()
|
||||
navigateToMainScreen()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("LoginFragment", "Ошибка при обработке состояния", e)
|
||||
Toast.makeText(context, "Произошла ошибка. Пожалуйста, попробуйте снова.", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun showMaintenanceDialog() {
|
||||
AlertDialog.Builder(requireContext())
|
||||
.setTitle("Технические работы")
|
||||
.setMessage("Проводятся техработы, пожалуйста, подождите.")
|
||||
.setPositiveButton("ОК") { dialog, _ -> dialog.dismiss() }
|
||||
.setCancelable(false)
|
||||
.show()
|
||||
}
|
||||
|
||||
private fun navigateToMainScreen() {
|
||||
try {
|
||||
findNavController().apply {
|
||||
@ -103,7 +120,7 @@ class LoginFragment : Fragment(R.layout.fragment_login) {
|
||||
navigate(R.id.mainFragment)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("LF", "Nav_err", e)
|
||||
Log.e("LoginFragment", "Nav_err", e)
|
||||
Toast.makeText(context, "Ошибка перехода", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
@ -34,13 +34,21 @@ class LoginViewModel @Inject constructor(
|
||||
fun authenticate(username: String, password: String) {
|
||||
if (isValidUsername(username)) {
|
||||
viewModelScope.launch {
|
||||
val credentials = Credentials.basic(username, password) // Создаем Basic Auth заголовок
|
||||
val response = apiService.authenticate(username, credentials) // Передаем заголовок в запрос
|
||||
if (response.isSuccessful) {
|
||||
SessionManager.userLogin = username
|
||||
_state.value = LoginState(success = true)
|
||||
} else {
|
||||
_state.value = LoginState(error = "Ошибка авторизации")
|
||||
try {
|
||||
val credentials = Credentials.basic(username, password) // Создаем Basic Auth заголовок
|
||||
val response = apiService.authenticate(username, credentials) // Передаем заголовок в запрос
|
||||
if (response.isSuccessful) {
|
||||
SessionManager.userLogin = username
|
||||
_state.value = LoginState(success = true)
|
||||
} else if (response.code() == 503) { // Пример кода для техработ
|
||||
_state.value = LoginState(maintenance = true)
|
||||
} else {
|
||||
_state.value = LoginState(error = "Ошибка авторизации")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
// Логирование ошибки
|
||||
e.printStackTrace()
|
||||
_state.value = LoginState(error = "Ошибка сети. Проверьте подключение к интернету.")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -52,5 +60,5 @@ class LoginViewModel @Inject constructor(
|
||||
return username.length >= 3 && !username.first().isDigit() && username.all { it.isLetterOrDigit() }
|
||||
}
|
||||
|
||||
data class LoginState(val success: Boolean = false, val error: String? = null)
|
||||
data class LoginState(val success: Boolean = false, val error: String? = null, val maintenance: Boolean = false)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user