66,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
안드로이드 스튜디오 오류 메시지(버전 오류?)
강의 잘 따라오다 특정 지점부터 갑자기 이렇게 지속적으로 뜹니다. Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.> 'compileDebugJavaWithJavac' task (current target is 9) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version. Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain* Try:> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Exception is:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:kaptGenerateStubsDebugKotlin'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:149) at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:147) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:135) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) 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:157) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:338) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:325) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:318) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:304) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)Caused by: org.gradle.api.GradleException: 'compileDebugJavaWithJavac' task (current target is 9) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.validateKotlinAndJavaHasSameTargetCompatibility(Tasks.kt:797) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompilerAsync$kotlin_gradle_plugin_common(Tasks.kt:722) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompilerAsync$kotlin_gradle_plugin_common(Tasks.kt:530) at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.executeImpl(Tasks.kt:450) at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.execute(Tasks.kt:417) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:45) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.execute(IncrementalTaskAction.java:26) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29) at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:242) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26) 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:157) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68) at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:227) at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:210) at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:193) at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:166) at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:93) at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44) at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:57) at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:54) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) 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:157) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73) at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:54) at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44) at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:67) at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:37) at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41) at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74) at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55) at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50) at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:28) at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.executeDelegateBroadcastingChanges(CaptureStateAfterExecutionStep.java:100) at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:72) at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:50) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:40) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:29) at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:166) at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:70) at org.gradle.internal.Either$Right.fold(Either.java:175) at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59) at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:68) at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:46) at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36) at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25) at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36) at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22) at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:91) at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:55) at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55) at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:37) at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:65) at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:36) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27) at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:76) at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:37) at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:94) at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:49) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:71) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:45) at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNonEmptySources(SkipEmptyWorkStep.java:177) at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:81) at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:53) at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32) at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38) at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36) at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23) at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute(CleanupStaleOutputsStep.java:75) at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute(CleanupStaleOutputsStep.java:41) at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:32) at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:287) at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30) at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:21) at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37) at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27) at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:42) at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:31) at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:64) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:146) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:135) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) 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:157) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:338) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:325) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:318) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:304) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
코인 사이트에서 데이터 깔끔하게 정리하는법 궁금합니다
개복치님께서 이런 화면을 깔끔하게 정리하시던데 방법이 궁금해요
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
뷰 바인딩에 대해서 궁금점이 있습니다.
강의에서는 뷰바인딩 에 대한 설정을 private var _binding : FragmentIntro2Binding? = nullprivate val binding get() = _binding!!_binding = FragmentIntro2Binding.inflate(inflater,container,false)이렇게 3줄로 하지만인터넷 검색을 하면 대부분이 val binding = FragmentMenuBinding.inflate(inflater, container, false)이 한줄로 끝나는데요이 두가지방법에 대한 차이가 궁급합니다.
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
안녕하세요 인트로 액티비티에서 바인딩 에러가 나서 질문 올립니다
안녕하세요 아래와 같이 작성하였는데 바인딩 에러가 나는 이유를 모르겠어서 질문 올립니다! Caused by: android.view.InflateException: Binary XML file line #18 in com.example.coco:layout/activity_intro: Binary XML file line #18 in com.example.coco:layout/activity_intro: Error inflating class androidx.fragment.app.FragmentContainerView Caused by: android.view.InflateException: Binary XML file line #18 in com.example.coco:layout/activity_intro: Error inflating class androidx.fragment.app.FragmentContainerViewpackage com.example.coco.view.intro import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import androidx.activity.viewModels import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.lifecycle.Observer import com.example.coco.MainActivity import com.example.coco.databinding.ActivityIntroBinding // Splash 화면 만들기 class IntroActivity : AppCompatActivity() { private lateinit var binding : ActivityIntroBinding private val viewModel: IntroViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { installSplashScreen() binding = ActivityIntroBinding.inflate(layoutInflater) super.onCreate(savedInstanceState) setContentView(binding.root) viewModel.checkFirstFlag() viewModel.first.observe(this, Observer { if (it){ // 처음 접속하는 유저가 아님 val intent = Intent(this, MainActivity::class.java) startActivity(intent) }else{ // 처음 접속하는 유저 binding.fragmentContainerView.visibility = View.VISIBLE } }) } }
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
App.kt의 NullPointerException
Viewmodel의 함수를 실행하면 App.kt의private var instance : App? = null을 가리키며 NullPointerException 에러가 납니다.혹시 짐작 가시는 문제점이나 해볼 만한 해결 방법이 있다면 알려주세요수업에서 말씀 해주신 것처럼 꼭 이렇게 하지 않아도 된다의 다른 방법을 알려주셔도 감사합니다! App.kt에서 어플리케이션을 가져다 쓰지 않고 DataStore에서 직접 호출할 수도 있나요!? Application()으로는 안 되더군요..수업을 제 프로젝트에 응용해서 적용 중이라 코드를 샅샅이 비교하며 찾아보긴 했는데 여전히 같은 에러가 발생하네요ㅜㅜ
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
LiveData 관련 질문
메인 화면을 만드는 과정에서 livedata에 대해 궁금한 점이 생겨 질문드립니다. selected 버튼을 누르면, dbRepository.updateInterestCoinData(interestCoinEntity) 를 통해 db에 있는 데이터가 업데이트 되는 것 까지는 알겠는데, 그 이후 livedata인 뷰모델에 선언된 변수, selectedCoinList가 업데이트 되어서 다시 리사이클러뷰가 업데이트되는 것인가요? 어떻게 리사이클러뷰의 UI가 업데이트 되는 것인지가 헷갈려 질문드립니다.
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
splash 화면 제작 부분 (아이콘) 사진이 안떠요
강의와 같이 splash 화면 제작 부분 따라했는데 빨간 background만 뜨고 이미지가 안떠요.. values/theme.xml 코드 왼쪽엔 그래프 사진이 뜨는게 보이는데 어디서 잘못된 걸까요?
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
관찰하는 데이터가 여러 개일 때 어떤 걸 사용하나요?
강사님의 챕터 메인화면꾸미기(관심있는 코인가격)의 코인 가격 변동사항 로직 작성 마무리(Room)에서 관찰하는 데이터가 arr15min, arr30min, arr45min만 있으니 Livedata를 쓰지만 많을 경우에는 아니라고 하셨는데 많을 경우에는 어떻게 처리해주는지 궁금합니다
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
init의 역할
'메인 화면으로 넘어가기 위한 준비' 챕터의 '처음 접속하는지 아닌지 Flag 값 부분에서 다음과 같이 instance가 null로 초기화되고 있는 것이 아닌가요..? init { } 안에 instance=this를 하지 않았을 때 앱이 죽어버리는 문제가 발생했는데 init 안에 instance = this는 어떤 의미를 담고 있는 것인가요..?
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
챕터1부분 질문입니다.
왼쪽이 제가 작성한 부분이고 오른쪽이 선생님강의입니다.코인 선택화면 API 데이터 받아와서 확인 (Retrofit / Coroutine) 7분에서1. 제가 작성한 부분이 ViewModel 은 lifecycle이고 선생님께서 작성하신viewModel은 selectViewModel로 되어있는데요.이거 뭔차이가있나요?SelectViewModel 클래스를 ViewModel()타입으로 선언한거를 SelectActivity.kt에 ViewModel 변수에 넣어준거 맞나요? 2.코인 선택화면 API 데이터 받아와서 확인 (Retrofit / Coroutine) 10분에서class NetworkRepository {private val client=RetrofitInstance.getInstance().create(Api::class.java)suspend fun getCurrentCoinList1()=client.getCurrentCoinList()//API주소}이런코드가있는데요.getCurrentCoinList1()가 함수인거 같은데 대입연산자 사용이 가능한가요? 3 NetworkRepository에서요.코드.class NetworkRepository {private val client=RetrofitInstance.getInstance().create(Api::class.java)//클래스RetrofitInstance 에서 retrofit형식을 가진 client를 불러온다.suspend fun getCurrentCoinList1()=client.getCurrentCoinList()//API주소 }이런코드가있는데요.suspend fun getCurrentCoinList1()=client.getCurrentCoinList()//API주소질문3번 :getCurrentCoinList()함수가 api클래스 내부 함수인거 같은데요.근데 RetrofitInstance.getInstance()여기서는 api파일을 받은게 없는데 어떻게 api 함수인 getCurrentCoinList()를 쓸수있나요?} 4. 데이터 코인 선택 Acitivity로 받아오기 (LiveData) 1분22초에서 원래코드는 이건데요. class SelectViewModel : ViewModel() { private val netWorkRepository = NetWorkRepository() private lateinit var currentPriceResultList : ArrayList<CurrentPriceResult> // 데이터변화를 관찰 LiveData private val _currentPriceResult = MutableLiveData<List<CurrentPriceResult>>() val currentPriceResult : LiveData<List<CurrentPriceResult>> get() = _currentPriceResult fun getCurrentCoinList() = viewModelScope.launch { val result = netWorkRepository.getCurrentCoinList() currentPriceResultList = ArrayList() for(coin in result.data) {================================================class SelectViewModel : ViewModel() { private val netWorkRepository = NetWorkRepository() private lateinit var currentPriceResultList : ArrayList<CurrentPriceResult> fun getCurrentCoinList() = viewModelScope.launch { // 데이터변화를 관찰 LiveData private val _currentPriceResult = MutableLiveData<List<CurrentPriceResult>>() val currentPriceResult : LiveData<List<CurrentPriceResult>> get() = _currentPriceResult val result = netWorkRepository.getCurrentCoinList() currentPriceResultList = ArrayList() for(coin in result.data) { 이렇게 작성하면 LiveData를 viewModelScope.launch {안에 넣어주면 위사진처럼 get()을 import하면 뭔가 많이 나오는데 이건 왜이런건가요?
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
패턴질문입니다.
프로젝트 공부하다가 궁금한점이있어 질문드립니다.커뮤니티앱은 mvc패턴이고코인가격앱은 mvvm패턴인가요?
- 해결됨[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
관심있는 코인/관심없는 코인 업데이트 오류
하트를 누르면 값이 바뀌긴 하나 화면에 반영이 되진 않습니다.깃허브 주소https://github.com/Hju95/coin
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
인트로 화면 제작부분에서 질문있습니다.
인트로 화면 완료 (Navigation)2분에서 private var _binding: FragmentIntro1Binding?=null 에서요.FragmentIntro1Binding는 무슨 타입인가요? 코인선택 화면 꾸미기 (XML)2분 38초에서요.처음에는 val intent= Intent(this,SelectActivity::class.java)이렇게 쓰셨다가 빨간줄 나오니까 val intent= Intent(requireContext(),SelectActivity::class.java)로 쓰셨는데요.근데 여기 https://www.youtube.com/watch?v=oXIeBhV06-Y 17분정도에는 Intent(this,)로도 가능한데 왜 안되나요? 3.스플래쉬화면만들기에서8분정도에요. 인터넷에 찾아보니 xml 에서도 상속 받는다는건 알겠는데요. 혹시 어디서 받는건가요? 해당 xml 파일은 Theme.SplashScreen이 없던데요.<style name="Theme.MyApplication3.Splash" parent="Theme.SplashScreen">4.네비게이션 인트로 화면세팅 10 분 44초에서tools:layout_editor_absoluteX="1dp"tools:layout_editor_absoluteY="1dp"지우고가로 세로 mach_parent로 하면 왜 <androidx.fragment.app.FragmentContainerView 이부분이 빨간줄이 사라지나요?
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
코인 선택화면 API 데이터 받아와서 확인 파트에서 질문있습니다.
코인 선택화면 API 데이터 받아와서 확인 (Retrofit / Coroutine)3분 52초에api.kt 중package com.bokchi.coco.networkimport com.bokchi.coco.network.model.CurrentPriceListimport retrofit2.http.GETinterface Api {// public/ticker/ALL_KRW@GET("public/ticker/ALL_KRW")suspend fun getCurrentCoinList() : CurrentPriceList}@GET("public/ticker/ALL_KRW") 이부분 주소가 select activity에 나와있는 http로 시작하는 주소가 다른데 어느부분을 보고 쓴건지 알수있을까요? select activity.kt에서 중간부분 코드에 // https://apidocs.bithumb.com/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all <===http주소가 있는데요. 근데 이주소에 public/ticker/ALL_KRW가 들어가 있지를 않은데 강의에서는 이주소에 나와있는걸 쓴다고 말씀하셔서요.package com.bokchi.coco.viewimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport androidx.activity.viewModelsimport androidx.lifecycle.Observerimport androidx.recyclerview.widget.LinearLayoutManagerimport com.bokchi.coco.Rimport com.bokchi.coco.databinding.ActivitySelectBindingimport com.bokchi.coco.view.adapter.SelectRVAdapterimport timber.log.Timber// https://apidocs.bithumb.com/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all <<====class SelectActivity : AppCompatActivity() { private lateinit var binding : ActivitySelectBinding private val viewModel : SelectViewModel by viewModels() // FAQ private lateinit var selectRVAdapter: SelectRVAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySelectBinding.inflate(layoutInflater) setContentView(binding.root) viewModel.getCurrentCoinList() viewModel.currentPriceResult.observe(this, Observer { selectRVAdapter = SelectRVAdapter(this, it) binding.coinListRV.adapter = selectRVAdapter binding.coinListRV.layoutManager = LinearLayoutManager(this) Timber.d(it.toString()) }) }}
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
오류가 생성되는데 왜 생기는지 궁금해서 질문드립니다
E/RecyclerView: No adapter attached; skipping layoutE/RecyclerView: No adapter attached; skipping layout coinListFragment 에서 생성되는 오류라고 생해서 관련된 부분을 수정해보았으나 계속해서 오류가 생성되서 왜 생기는걸까? 궁금해서 질문드립니다. 오류와 관계없이 화면에 리사이클러뷰는 잘 나오기때문에 넘어가도 상관없겠다 싶지만서도 왜 저런 오류가 생기는지 궁금해서 질문 합니다.처음에는 XML 상에서도 layoutManager 를 지정해줘야 하나 싶어서 했으나 나타났고, 다음으로는 context 관련 문제인가 싶어서 해당하는 부분을 수정하다가 오히려 더 오류가 발생하였습니다...ㅋㅋㅋ기능에는 문제가 없기 때문에 넘어가도 괜찮지만 순수하게 궁금해서 질문합니다. 아니면 혹시, coinListFragment 쪽의 RecyclerView 가 아닌, Intro 에서 좋아하는 코인을 만들때 의 오류메시지 일까요?
- 해결됨[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
Button을 사용하는 경우와 TextView를 사용하는 경우에 대해 차이가 궁금합니다.
안녕하세요 강의 막바지를 향해 달려가고 있던 중 궁금한 점이 있습니다.SelectActivity에서 다음 MainActivity로 넘어가기 위해 onClick 이벤트를 TextView를 통해 처리하는 것을 보았습니다. 그런데 SettingActivity에서는 Button을 생성하는 것을 보고 TextView를 통해 클릭 이벤트를 처리하는 것과 Button을 통해 이벤트를 처리하는 것에 대한 차이가 있는지 궁금합니다.혹은 개발자님만의 상황에 따른 사용 기준이 따로 있나요??유익한 강의 너무 잘 듣고 있습니다. 감사합니다
- 해결됨[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
repository 를 거쳐서 Api 를 가져오는 이유
SelectViewModel 에서 Api를 바로 호출하지 않고repository 거쳐서 가는게 관리하기 편해서라고 하셨는데이해가 잘 가지 않아서요..바로 호출하면 어떤 불편한 점이 있나요?
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
안녕하세요 앱 종료 오류 원인을 모르겠습니다.
안녕하세요강의 늘 잘 듣고 있습니다. 다름이 아니라 강의를 보면서 오류가 발생하여 방법을 찾다가 해결이 안되어서 개복치 개발자님의 코드를 그대로 복사해서 붙여넣기를 해도 같은 오류가 발생합니다.실행하고 로그캣을 보니 viewmodels 쪽에서 오류로 앱이 종료가 되는데 도저히 모르겠습니다.깃허브 주소입니다. 해결방법 알려주시면 감사하겠습니다.늘 좋은 강의 감사합니다.
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
raw/coin.json 파일 질문!
수업잘보고 있습니다^^하나 궁금한게, 인트로화면에서 돈튀기는 애니메이션 사용할때 raw/coin.json 이 파일로 사용하는거 같은데이런 애니매이션 파일(coin.json)은 내가 원하는 애니메이션으로 만드는 방법이 어떻게 될까요? 예를들면 기차가 지나가는 애니메이션을 만들고 싶은데 json 파일을 어떻게 만드는지 궁금합니다!
- 미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
binding 선언시 null 허용을 하는 이유가 있나요?
안녕하세요.강의 잘 보고 있습니다.몇가지 질문이 있습니다. Fragment 에서binding 선언시 lateInit var를 사용 안하고 null 허용을 하는 이유가 onDestory()에서 해제를 하려는 이유인가요? lateinit var 로 선언하면 onDestory()에서 해제 할 수 없는건가요? onDestory() 에서 해제를 안하면 안되나요?