diff --git a/.kotlin/errors/errors-1778721414398.log b/.kotlin/errors/errors-1778721414398.log new file mode 100644 index 0000000..cc3f541 --- /dev/null +++ b/.kotlin/errors/errors-1778721414398.log @@ -0,0 +1,48 @@ +kotlin version: 2.2.10 +error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker179082831627939137.tmp + +error message: Daemon compilation failed: Could not connect to Kotlin compile daemon +java.lang.RuntimeException: Could not connect to Kotlin compile daemon + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214) + 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:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + 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:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269) + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) + + diff --git a/.kotlin/errors/errors-1778721414728.log b/.kotlin/errors/errors-1778721414728.log new file mode 100644 index 0000000..e39693c --- /dev/null +++ b/.kotlin/errors/errors-1778721414728.log @@ -0,0 +1,48 @@ +kotlin version: 2.2.10 +error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker9068936915688350819.tmp + +error message: Daemon compilation failed: Could not connect to Kotlin compile daemon +java.lang.RuntimeException: Could not connect to Kotlin compile daemon + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214) + 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:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + 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:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269) + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) + + diff --git a/.kotlin/errors/errors-1778722960129.log b/.kotlin/errors/errors-1778722960129.log new file mode 100644 index 0000000..f5c155c --- /dev/null +++ b/.kotlin/errors/errors-1778722960129.log @@ -0,0 +1,48 @@ +kotlin version: 2.2.10 +error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker3691483924502396492.tmp + +error message: Daemon compilation failed: Could not connect to Kotlin compile daemon +java.lang.RuntimeException: Could not connect to Kotlin compile daemon + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214) + 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:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + 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:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269) + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) + + diff --git a/.kotlin/errors/errors-1778723527039.log b/.kotlin/errors/errors-1778723527039.log new file mode 100644 index 0000000..6eb1dde --- /dev/null +++ b/.kotlin/errors/errors-1778723527039.log @@ -0,0 +1,48 @@ +kotlin version: 2.2.10 +error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker8935888315998030351.tmp + +error message: Daemon compilation failed: Could not connect to Kotlin compile daemon +java.lang.RuntimeException: Could not connect to Kotlin compile daemon + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214) + 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:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + 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:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269) + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) + + diff --git a/.kotlin/errors/errors-1778723527344.log b/.kotlin/errors/errors-1778723527344.log new file mode 100644 index 0000000..7cb65c5 --- /dev/null +++ b/.kotlin/errors/errors-1778723527344.log @@ -0,0 +1,48 @@ +kotlin version: 2.2.10 +error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker5091675923199266774.tmp + +error message: Daemon compilation failed: Could not connect to Kotlin compile daemon +java.lang.RuntimeException: Could not connect to Kotlin compile daemon + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214) + 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:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + 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:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269) + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) + + diff --git a/.kotlin/errors/errors-1778724232190.log b/.kotlin/errors/errors-1778724232190.log new file mode 100644 index 0000000..988ef82 --- /dev/null +++ b/.kotlin/errors/errors-1778724232190.log @@ -0,0 +1,48 @@ +kotlin version: 2.2.10 +error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker266283157239935792.tmp + +error message: Daemon compilation failed: Could not connect to Kotlin compile daemon +java.lang.RuntimeException: Could not connect to Kotlin compile daemon + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214) + 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:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + 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:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269) + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) + + diff --git a/.kotlin/errors/errors-1778724232499.log b/.kotlin/errors/errors-1778724232499.log new file mode 100644 index 0000000..e3c6032 --- /dev/null +++ b/.kotlin/errors/errors-1778724232499.log @@ -0,0 +1,48 @@ +kotlin version: 2.2.10 +error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker10438920969563414663.tmp + +error message: Daemon compilation failed: Could not connect to Kotlin compile daemon +java.lang.RuntimeException: Could not connect to Kotlin compile daemon + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214) + 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:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + 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:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269) + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) + + diff --git a/app/src/main/java/com/example/defenseapplication/bean/BaseInfo.kt b/app/src/main/java/com/example/defenseapplication/bean/BaseInfo.kt new file mode 100644 index 0000000..735e62f --- /dev/null +++ b/app/src/main/java/com/example/defenseapplication/bean/BaseInfo.kt @@ -0,0 +1,10 @@ +package com.example.defenseapplication.bean + +/** + * 统一返回数据基类(根据你的后端实际字段调整) + */ +data class BaseInfo( + val message: String? = null, + val code: Int = 0, + val data: Any? = null +) \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/bean/DeviceBean.kt b/app/src/main/java/com/example/defenseapplication/bean/DeviceBean.kt new file mode 100644 index 0000000..a102c2e --- /dev/null +++ b/app/src/main/java/com/example/defenseapplication/bean/DeviceBean.kt @@ -0,0 +1,10 @@ +package com.example.defenseapplication.bean + +data class DeviceBean( + val id: String, + val deviceName: String, + val status: String, + val deviceType: String, + val parentId: String, + val createTime: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/bean/FamilyBean.kt b/app/src/main/java/com/example/defenseapplication/bean/FamilyBean.kt new file mode 100644 index 0000000..76e6940 --- /dev/null +++ b/app/src/main/java/com/example/defenseapplication/bean/FamilyBean.kt @@ -0,0 +1,15 @@ +package com.example.defenseapplication.bean + +data class FamilyBean( + val id: String, + val parentId: String, + val parentName: String, + val userId: String, + val nickName: String?, + val idCard: String?, + val phonenumber: String?, + val status: String, + val role: String, + val createTime: String?, + val inviteCode: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/bean/LoginBean.kt b/app/src/main/java/com/example/defenseapplication/bean/LoginBean.kt index a68958a..ad61c84 100644 --- a/app/src/main/java/com/example/defenseapplication/bean/LoginBean.kt +++ b/app/src/main/java/com/example/defenseapplication/bean/LoginBean.kt @@ -1,12 +1,5 @@ package bean -//登录-bean -data class Login( - val message: String, - val result: T, - val status: String -) - data class LoginBean( val headPic: String, val nickName: String, diff --git a/app/src/main/java/com/example/defenseapplication/home/HomeMenuFragment.kt b/app/src/main/java/com/example/defenseapplication/home/HomeMenuFragment.kt index e35024b..674a6c4 100644 --- a/app/src/main/java/com/example/defenseapplication/home/HomeMenuFragment.kt +++ b/app/src/main/java/com/example/defenseapplication/home/HomeMenuFragment.kt @@ -1,12 +1,12 @@ package com.example.defenseapplication.home import android.content.Intent -import android.content.res.Resources import android.graphics.Color import android.graphics.Rect import android.graphics.drawable.GradientDrawable import android.os.Bundle import android.util.TypedValue +import android.widget.Toast import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View @@ -18,10 +18,17 @@ import com.example.defenseapplication.R import com.example.defenseapplication.adapter.DeviceAdapter import com.example.defenseapplication.adapter.DeviceUi import com.example.defenseapplication.adapter.FamilyAdapter +import com.example.defenseapplication.bean.DeviceBean +import com.example.defenseapplication.bean.FamilyBean import com.example.defenseapplication.databinding.HomeMenuFragmentBinding +import com.example.defenseapplication.utils.RetrofitNetwork import com.example.defenseapplication.view.DefenseDialogs import com.example.defenseapplication.view.showDefenseDialog import com.gyf.immersionbar.ImmersionBar +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext //主页碎片 class HomeMenuFragment : Fragment() { // ViewBinding @@ -33,30 +40,9 @@ class HomeMenuFragment : Fragment() { private var isFamilyExpanded = false private lateinit var currentFamily: String - private val familyList: List by lazy { - listOf( - getString(R.string.my_family_home), - getString(R.string.workshop), - getString(R.string.parents_home) - ) - } - private val familyDeviceMap: Map> by lazy { - mapOf( - getString(R.string.my_family_home) to listOf( - DeviceUi(getString(R.string.smart_hanging_defense), true), - DeviceUi(getString(R.string.smart_defense_device), false), - DeviceUi(getString(R.string.smart_rail_defense), false) - ), - getString(R.string.workshop) to listOf( - DeviceUi(getString(R.string.corridor_defense), true), - DeviceUi(getString(R.string.door_defense), true) - ), - getString(R.string.parents_home) to listOf( - DeviceUi(getString(R.string.living_room_defense), false), - DeviceUi(getString(R.string.balcony_defense), true) - ) - ) - } + private var familyList: List = emptyList() + private var familyBeanList: List = emptyList() + private var deviceBeanList: List = emptyList() override fun onCreateView( inflater: LayoutInflater, @@ -93,13 +79,13 @@ class HomeMenuFragment : Fragment() { val intent = Intent(requireContext(), ScanActivity::class.java) startActivity(intent) } + + fetchFamilyList() } private fun initView() { - currentFamily = familyList.first() binding.rvFamilyList.layoutManager = LinearLayoutManager(requireContext()) binding.rvFamilyList.adapter = familyAdapter - familyAdapter.submitList(familyList, currentFamily) binding.rvDeviceList.layoutManager = GridLayoutManager(requireContext(), 2) binding.rvDeviceList.adapter = deviceAdapter @@ -108,9 +94,7 @@ class HomeMenuFragment : Fragment() { GridHorizontalSpaceItemDecoration(horizontalSpace = dpToPx(8)) ) } - updateDeviceList() - binding.tvCurrentFamily.text = currentFamily binding.familyHeaderLayout.setOnClickListener { toggleFamilyList() } @@ -121,6 +105,52 @@ class HomeMenuFragment : Fragment() { } } + private fun fetchFamilyList() { + CoroutineScope(Dispatchers.IO).launch { + try { + val response = RetrofitNetwork.getNetworkService().getFamilyList() + withContext(Dispatchers.Main) { + if (response.code == 200 && response.data != null) { + familyBeanList = response.data + familyList = response.data.map { it.parentName } + if (familyList.isNotEmpty()) { + currentFamily = familyList.first() + binding.tvCurrentFamily.text = currentFamily + familyAdapter.submitList(familyList, currentFamily) + } + } else { + Toast.makeText(requireContext(), response.msg, Toast.LENGTH_SHORT).show() + } + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + Toast.makeText(requireContext(), R.string.network_error, Toast.LENGTH_SHORT).show() + } + } + fetchDeviceList() + } + } + + private fun fetchDeviceList() { +// CoroutineScope(Dispatchers.IO).launch { +// try { +// val response = RetrofitNetwork.getNetworkService().getDeviceList() +// withContext(Dispatchers.Main) { +// if (response.code == 200 && response.data != null) { +// deviceBeanList = response.data +// updateDeviceList() +// } else { +// Toast.makeText(requireContext(), response.msg, Toast.LENGTH_SHORT).show() +// } +// } +// } catch (e: Exception) { +// withContext(Dispatchers.Main) { +// Toast.makeText(requireContext(), R.string.network_error, Toast.LENGTH_SHORT).show() +// } +// } +// } + } + private fun toggleFamilyList() { isFamilyExpanded = !isFamilyExpanded val visibility = if (isFamilyExpanded) View.VISIBLE else View.GONE @@ -143,7 +173,24 @@ class HomeMenuFragment : Fragment() { } private fun updateDeviceList() { - deviceAdapter.submitList(familyDeviceMap[currentFamily].orEmpty()) + val currentFamilyBean = familyBeanList.find { it.parentName == currentFamily } + val filteredDevices = if (currentFamilyBean != null) { + deviceBeanList.filter { it.parentId == currentFamilyBean.id } + } else { + deviceBeanList + } + + val deviceUiList = filteredDevices.map { + DeviceUi(it.deviceName, it.status == "online") + } + + if (deviceUiList.isEmpty()) { + deviceAdapter.submitList(listOf( + DeviceUi(getString(R.string.no_device), false) + )) + } else { + deviceAdapter.submitList(deviceUiList) + } } private fun onDeviceClicked(device: DeviceUi) { diff --git a/app/src/main/java/com/example/defenseapplication/login/ForgetPasswordActivity.kt b/app/src/main/java/com/example/defenseapplication/login/ForgetPasswordActivity.kt index 909a83c..90efbe6 100644 --- a/app/src/main/java/com/example/defenseapplication/login/ForgetPasswordActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/login/ForgetPasswordActivity.kt @@ -9,7 +9,7 @@ import androidx.appcompat.app.AppCompatActivity import bean.ForgotRequest import com.example.defenseapplication.R import com.example.defenseapplication.databinding.ForgetPasswordActivityBinding -import com.example.defenseapplication.utils.HttpUtils +import com.example.defenseapplication.utils.RetrofitNetwork import com.google.firebase.crashlytics.buildtools.reloc.org.apache.http.util.TextUtils import com.gyf.immersionbar.ImmersionBar import kotlinx.coroutines.CoroutineScope @@ -79,7 +79,7 @@ class ForgetPasswordActivity : AppCompatActivity() { CoroutineScope(Dispatchers.IO).launch { try { - val response = HttpUtils.api.getCode(phoneNumber) + val response = RetrofitNetwork.getNetworkService().getCode(phoneNumber) withContext(Dispatchers.Main) { if (response.code == 200) { Toast.makeText(this@ForgetPasswordActivity, "验证码已发送", Toast.LENGTH_SHORT).show() @@ -173,7 +173,7 @@ class ForgetPasswordActivity : AppCompatActivity() { smsCode = smsCode, password = newPassword ) - val response = HttpUtils.api.forgotPassword(forgotRequest) + val response = RetrofitNetwork.getNetworkService().forgotPassword(forgotRequest) withContext(Dispatchers.Main) { binding.btnNext.isEnabled = true binding.btnNext.text = "确定" diff --git a/app/src/main/java/com/example/defenseapplication/login/LoginActivity.kt b/app/src/main/java/com/example/defenseapplication/login/LoginActivity.kt index 7e1ac2f..003af94 100644 --- a/app/src/main/java/com/example/defenseapplication/login/LoginActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/login/LoginActivity.kt @@ -14,7 +14,7 @@ import bean.LoginRequest import com.example.defenseapplication.R import com.example.defenseapplication.databinding.ActivityLoginBinding import com.example.defenseapplication.home.HomeActivity -import com.example.defenseapplication.utils.HttpUtils +import com.example.defenseapplication.utils.RetrofitNetwork import com.example.defenseapplication.utils.UserinfoUtil import com.gyf.immersionbar.ImmersionBar import kotlinx.coroutines.CoroutineScope @@ -200,7 +200,7 @@ class LoginActivity : AppCompatActivity() { private fun sendVerificationCode(phone: String) { CoroutineScope(Dispatchers.IO).launch { try { - val response = HttpUtils.api.getCode(phone) + val response = RetrofitNetwork.getNetworkService().getCode(phone) withContext(Dispatchers.Main) { if (response.code == 200) { Toast.makeText(this@LoginActivity, getString(R.string.code_sent_to, phone), Toast.LENGTH_SHORT).show() @@ -227,7 +227,7 @@ class LoginActivity : AppCompatActivity() { smsCode = smsCode ) android.util.Log.d("LoginActivity", "短信登录请求: $loginRequest") - val response = HttpUtils.api.login(loginRequest) + val response = RetrofitNetwork.getNetworkService().login(loginRequest) android.util.Log.d("LoginActivity", "短信登录响应: code=${response.code}, msg=${response.msg}") withContext(Dispatchers.Main) { if (response.code == 200 && response.data != null) { @@ -260,7 +260,7 @@ class LoginActivity : AppCompatActivity() { password = password ) android.util.Log.d("LoginActivity", "密码登录请求: $loginRequest") - val response = HttpUtils.api.login(loginRequest) + val response = RetrofitNetwork.getNetworkService().login(loginRequest) android.util.Log.d("LoginActivity", "密码登录响应: code=${response.code}, msg=${response.msg}") withContext(Dispatchers.Main) { if (response.code == 200 && response.data != null) { diff --git a/app/src/main/java/com/example/defenseapplication/login/RegisterActivity.kt b/app/src/main/java/com/example/defenseapplication/login/RegisterActivity.kt index 869c557..9e28388 100644 --- a/app/src/main/java/com/example/defenseapplication/login/RegisterActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/login/RegisterActivity.kt @@ -10,7 +10,7 @@ import androidx.appcompat.app.AppCompatActivity import bean.RegisterRequest import com.example.defenseapplication.R import com.example.defenseapplication.databinding.RegisterActivityBinding -import com.example.defenseapplication.utils.HttpUtils +import com.example.defenseapplication.utils.RetrofitNetwork import com.gyf.immersionbar.ImmersionBar import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -77,7 +77,7 @@ class RegisterActivity : AppCompatActivity() { CoroutineScope(Dispatchers.IO).launch { try { - val response = HttpUtils.api.getCode(userName) + val response = RetrofitNetwork.getNetworkService().getCode(userName) withContext(Dispatchers.Main) { if (response.code == 200) { Toast.makeText(this@RegisterActivity, "验证码已发送", Toast.LENGTH_SHORT).show() @@ -171,7 +171,7 @@ class RegisterActivity : AppCompatActivity() { inviteCode = if (inviteCode.isEmpty()) null else inviteCode, faceAddr = "https://tiebapic.baidu.com/forum/pic/item/2924ab18972bd407021da3e33d899e510eb309d1.jpg?tbpicau=2026-04-22-05_44105254d24a81214177d11b72513421" ) - val response = HttpUtils.api.register(registerRequest) + val response = RetrofitNetwork.getNetworkService().register(registerRequest) withContext(Dispatchers.Main) { isLoading = false binding.btnNext.isEnabled = true diff --git a/app/src/main/java/com/example/defenseapplication/utils/ApiConfig.kt b/app/src/main/java/com/example/defenseapplication/utils/ApiConfig.kt new file mode 100644 index 0000000..b024299 --- /dev/null +++ b/app/src/main/java/com/example/defenseapplication/utils/ApiConfig.kt @@ -0,0 +1,190 @@ +package com.example.defenseapplication.utils + +import android.annotation.SuppressLint +import android.util.Log +import com.example.defenseapplication.bean.BaseInfo +import com.google.gson.Gson +import com.google.gson.JsonParser +import okhttp3.Interceptor +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.Protocol +import okhttp3.Request +import okhttp3.Response +import okhttp3.ResponseBody.Companion.toResponseBody +import okhttp3.logging.HttpLoggingInterceptor +import java.nio.charset.Charset + +/** + * 网络配置与拦截器 + */ +object ApiConfig { + + private const val TAG = "ApiConfig" + private val gson = Gson() + @Volatile + private var authToken: String = "" + + fun updateAuthToken(token: String) { + authToken = token + } + + fun hasAuthToken(): Boolean { + return authToken.isNotBlank() + } + + /** + * 获取日志拦截器 + * 完善:针对上传文件等二进制流时,降低日志级别为 HEADERS,避免输出大量字节数据 + */ + fun getLoggingInterceptor(): Interceptor { + val logger = HttpLoggingInterceptor.Logger { message -> + Log.d(TAG, message) + } + + return Interceptor { chain -> + val request = chain.request() + if (/*!BuildConfig.DEBUG*/false) { + return@Interceptor chain.proceed(request) + } + + // 1. 判断请求是否为二进制或多部分表单上传 + val requestBody = request.body + val requestContentType = requestBody?.contentType()?.toString()?.lowercase() ?: "" + val isBinaryRequest = requestContentType.contains("multipart") || + requestContentType.contains("octet-stream") || + requestContentType.contains("image") || + requestContentType.contains("video") || + requestContentType.contains("audio") + + // 2. 动态设置日志级别 + val loggingInterceptor = HttpLoggingInterceptor(logger).apply { + level = if (isBinaryRequest) { + // 二进制上传只打印 Header,防止 Body 字节码干扰 + HttpLoggingInterceptor.Level.HEADERS + } else { + HttpLoggingInterceptor.Level.BODY + } + } + + loggingInterceptor.intercept(chain) + } + } + + /** + * 统一拦截器:处理异常、Token失效、数据格式化 + */ + @SuppressLint("CheckResult") + fun getUnifiedInterceptor() = Interceptor { chain -> + val request = chain.request() + + // --- 1. 发起请求并捕获底层网络异常 (无网络、超时等) --- + val response = try { + chain.proceed(request) + } catch (e: Exception) { + Log.e(TAG, "Network Error: ", e) + return@Interceptor buildFakeErrorResponse(request, getErrorMessage(e)) + } + + // --- 2. 检查响应是否为大文件或二进制流 (直接放行,避免 OOM 和日志污染) --- + val responseBody = response.body ?: return@Interceptor response + val contentType = responseBody.contentType()?.toString()?.lowercase() ?: "" + if (contentType.contains("octet-stream") || contentType.contains("video") || + contentType.contains("audio") || contentType.contains("image") || + responseBody.contentLength() > 1024 * 1024 + ) { + return@Interceptor response + } + + // --- 3. 读取 JSON 数据进行统一处理 --- + try { + val source = responseBody.source() + source.request(Long.MAX_VALUE) + val responseString = source.buffer.clone().readString(Charset.defaultCharset()) + + if (!responseString.trim().startsWith("{")) { + if (response.code == 500) { + return@Interceptor buildFakeErrorResponse(request, "服务器内部错误") + } + return@Interceptor response + } + + val jsonElement = JsonParser().parse(responseString) + val jsonObject = jsonElement.asJsonObject + + + val httpCode = response.code + val businessCode = if (jsonObject.has("code")) jsonObject.get("code").asInt else 0 + + if (httpCode == 401 || httpCode == 424 || businessCode == 401) { + clearUserLoginInfo() + val msg = if (jsonObject.has("msg")) jsonObject.get("msg").asString else "登录已过期,请重新登录" + return@Interceptor buildFakeErrorResponse(request, msg, code = if (businessCode != 0) businessCode else httpCode) + } + + if (httpCode == 500) { + return@Interceptor buildFakeErrorResponse(request, "服务器内部错误(500)") + } + + return@Interceptor response + + } catch (e: Exception) { + Log.e(TAG, "JSON Parse Error: ", e) + return@Interceptor response + } + } + + /** + * 构建一个伪装成 HTTP 200 的统一错误响应体 + */ + private fun buildFakeErrorResponse(request: Request, msg: String, code: Int = 1): Response { + val baseInfo = BaseInfo( + message = msg, + code = code, + data = null, + ) + val json = gson.toJson(baseInfo) + val responseBody = json.toResponseBody("application/json; charset=utf-8".toMediaTypeOrNull()) + + return Response.Builder() + .request(request) + .protocol(Protocol.HTTP_1_1) + .code(200) + .message("OK") + .body(responseBody) + .build() + } + + private fun getErrorMessage(e: Exception): String { + return "网络请求失败,请检查网络设置" + } + + // 统一请求头拦截器 + fun createHeadersInterceptor() = Interceptor { chain -> + val requestBuilder = chain.request().newBuilder() + val token = authToken + + if (token.isNotBlank()) { + requestBuilder.header("Authorization", buildAuthorizationValue(token)) + } + + requestBuilder +// .header("Client-Toc", "Y") +// .header("Accept-Language", LanguageHelper.getLanguageServiceStr(BrightApp.getInstance())) +// .header("model", "Android") +// .header("X-App-Version", AppUtils.getAppVersionName()) + + chain.proceed(requestBuilder.build()) + } + + private fun buildAuthorizationValue(token: String): String { + return if (token.startsWith("Bearer ")) token else "Bearer $token" + } + + private fun clearUserLoginInfo() { + try { + authToken = "" + } catch (e: Exception) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt b/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt index b89bd00..4247750 100644 --- a/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt +++ b/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt @@ -1,6 +1,8 @@ package com.example.defenseapplication.utils import bean.ForgotRequest +import com.example.defenseapplication.bean.DeviceBean +import com.example.defenseapplication.bean.FamilyBean import com.example.defenseapplication.bean.GetCodeBean import bean.LoginBean import bean.LoginRequest @@ -34,5 +36,17 @@ interface ApiService { */ @PUT("/app/forgot") suspend fun forgotPassword(@Body forgotRequest: ForgotRequest): GetCodeBean + + /** + * 获取我所在家庭列表 + */ + @GET("/app/selectFamily") + suspend fun getFamilyList(): GetCodeBean> + + /** + * 切换家庭 + */ + //@POST("/app/switchFamily") + //suspend fun switchFamily(@Body request: com.example.defenseapplication.bean.SwitchFamilyRequest): GetCodeBean } diff --git a/app/src/main/java/com/example/defenseapplication/utils/DataClass.kt b/app/src/main/java/com/example/defenseapplication/utils/DataClass.kt deleted file mode 100644 index f3e09a6..0000000 --- a/app/src/main/java/com/example/defenseapplication/utils/DataClass.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.defenseapplication.utils - -data class Post( - val userId: Int, - val id: Int, - val title: String, - val body: String -) \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/utils/HttpUtils.kt b/app/src/main/java/com/example/defenseapplication/utils/HttpUtils.kt deleted file mode 100644 index d00ac50..0000000 --- a/app/src/main/java/com/example/defenseapplication/utils/HttpUtils.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.example.defenseapplication.utils - -import okhttp3.Interceptor -import okhttp3.OkHttpClient -import okhttp3.Response -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory -import java.util.concurrent.TimeUnit - -//网络工具类 -object HttpUtils { - val baseURL = "https://stem-boozy-margarine.ngrok-free.dev" - val okHttpClient = OkHttpClient.Builder() - .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) - .writeTimeout(3, TimeUnit.MINUTES) - .readTimeout(3, TimeUnit.MINUTES) - .addInterceptor(object : Interceptor { - override fun intercept(chain: Interceptor.Chain): Response { - val s = UserinfoUtil.getUserInfo() - val aa = chain.request().newBuilder() - .addHeader("token", s?.token ?: "") - .addHeader("userId", "${s?.userId ?: 0}") - .build() - return chain.proceed(aa) - } - }) - .build() - - val retrofit = Retrofit.Builder() - .addConverterFactory(GsonConverterFactory.create()) - .client(okHttpClient) - .baseUrl(baseURL) - .build() - - - val api = retrofit.create(ApiService::class.java) - - - - - -} \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/utils/MainRepository.kt b/app/src/main/java/com/example/defenseapplication/utils/MainRepository.kt new file mode 100644 index 0000000..51128e3 --- /dev/null +++ b/app/src/main/java/com/example/defenseapplication/utils/MainRepository.kt @@ -0,0 +1,18 @@ +package com.smart.data.repository + +import com.example.defenseapplication.utils.ApiService +import com.example.defenseapplication.utils.RetrofitNetwork + + +class MainRepository(val apiService: ApiService = RetrofitNetwork.getNetworkService()) { + + companion object { + fun getInstance(): Array { + return arrayOf(MainRepository(RetrofitNetwork.getNetworkService())) + } + + fun getInstance(vararg any: Any): Array { + return arrayOf(MainRepository(RetrofitNetwork.getNetworkService()), *any) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/utils/RetrofitNetwork.kt b/app/src/main/java/com/example/defenseapplication/utils/RetrofitNetwork.kt new file mode 100644 index 0000000..dbbac15 --- /dev/null +++ b/app/src/main/java/com/example/defenseapplication/utils/RetrofitNetwork.kt @@ -0,0 +1,75 @@ +package com.example.defenseapplication.utils + +import com.google.gson.Gson +import okhttp3.OkHttpClient +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit + +/** + * 统一网络请求封装 + */ +object RetrofitNetwork { + + private const val DEFAULT_TIMEOUT = 30L + const val BASE_URL = "https://stem-boozy-margarine.ngrok-free.dev" + + private var retrofit: Retrofit? = null + private val gson = Gson() + + /** + * 动态修改 BaseUrl + */ + fun setBaseUrl(baseUrl: String) { + retrofit = createRetrofit(baseUrl) + } + + fun getNetworkService(): ApiService = getService(ApiService::class.java) + + fun getService(service: Class, baseUrl: String? = null): T { + if (retrofit == null || baseUrl != null) { + retrofit = createRetrofit(baseUrl ?: BASE_URL) + } + return retrofit!!.create(service) + } + + /** + * 专门用于下载的 Service (无日志,防止内存溢出) + */ + fun createRetrofitDownload(): ApiService { + return Retrofit.Builder() + .baseUrl(normalizeBaseUrl(BASE_URL)) + .client(createOkHttpClient(enableLogging = false)) + .addConverterFactory(GsonConverterFactory.create(gson)) + .build() + .create(ApiService::class.java) + } + + private fun createRetrofit(baseUrl: String): Retrofit { + return Retrofit.Builder() + .baseUrl(normalizeBaseUrl(baseUrl)) + .client(createOkHttpClient(enableLogging = true)) + .addConverterFactory(GsonConverterFactory.create(gson)) + .build() + } + + private fun normalizeBaseUrl(baseUrl: String): String { + val trimmed = baseUrl.trim() + return if (trimmed.endsWith("/")) trimmed else "$trimmed/" + } + + private fun createOkHttpClient(enableLogging: Boolean): OkHttpClient { + val builder = OkHttpClient.Builder() + .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .addInterceptor(ApiConfig.createHeadersInterceptor()) + .addInterceptor(ApiConfig.getUnifiedInterceptor()) // 使用 ApiConfig 中的统一拦截器 + + if (enableLogging) { + builder.addInterceptor(ApiConfig.getLoggingInterceptor()) // 使用 ApiConfig 中的日志拦截器 + } + + return builder.build() + } +} \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c3b18d5..cb2f24f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -20,4 +20,4 @@ #E8F7F7 #E5E5E5 - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8d64cbf..1d31e83 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,6 +74,7 @@ Bind Device Unbind Device No devices found + No device Add Device diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..753ab0c --- /dev/null +++ b/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file