묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
7강 retrofit 부분 서버 주소 질문드립니다.
주소에 접속해보니 아래와 같이 나오고 있습니다! retrofit 코드를 실행하였는데 제대로 작동하지 않아 로그를 찍어보았고 Log.e("실패","${response.errorBody()?.string()}")의 결과로 to가 Log에 찍혔습니다.또한 Log.e("실패","${response.code()}") 의 결과로 400이 나왔습니다! 서버 주소로 접속 시 저렇게 뜨는데 아래의 에러와 관련이 있을까요?
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
파이어베이스 새 프로젝트 만들때
안녕하세요. 파이어 베이스 익명로그인 부분을 듣고 있습니다. 파이어베이스 들어가서 새 프로젝트 등록하려는데 강의내용과 좀 달라서( 3번째 부분이요) 뭘 선택해야 하는지, 어떤 값을 가져와서 프로젝트에 등록해야 하는지 잘 모르겠습니다...알려주실 수 있으실까요..?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
파이어베이스 build.gradle쪽이 달라서 적용했더니 오류남
안녕하세요. 파이어베이스 세팅하는 중에 build.gradle이 달라서 수업자료에 있는 데로 작성한 후에 Sync now를 했더니 아래와 같은 오류가 생깁니다.A problem occurred configuring root project 'fb_login_test'.> Could not resolve all files for configuration ':classpath'. > Could not find com.google.gms.google-services:4.4.0:. Required by: project :Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html 작성한 부분 해결방법 없을까요....?ㅠㅠ
-
해결됨[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
cardStackAdapter 연결 문제
섹션1 - CardStackView 구현 에서 막히네욥 ㅠㅠ MainActivity 에서 마지막 줄 cardStackView.adapter = cardStackAdapter 코드추가 하면 에뮬실행이 안되서 해당로직 제거하고 에뮬 돌려봤어요. 그러면 잘 켜지는걸 보니 어댑터쪽 문제가 있는거같은데 원인을 못찾겠어요 ㅠㅠ https://github.com/Daseul727/Mobile-Skill-Up.git여기서 basic 폴더가 해당 소스코드입니다! 그리고 노션이 어디있는지 모르겠어서..노션 주소알수있을까요? 그리고 디버깅을 어떻게 하는지알수있을까요? 갑자기 앱이 안켜지는 현상으로는 원인찾기가 힘드네요 ㅠㅠ
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
null(!!)인지 null일수도 있는건지(?) 판단할수있는 기준이 어떻게 되는지 궁금합니다
안녕하세요 강사님앱강의 초반에는 멘탈도 많이 나가고 많이 헤맸는데 뒤로 갈수록 조금씩 이해가 되어가는것 같네요.. 다름이 아니라 코드를 따라 보면서 작성하다가 궁금해져서 질문을 드리는데요..?와 !!를 사용하고 안했을때 코드에서 빨간줄이 나오고 그러는데어떻게 판단하고 적용하시는건지 궁금합니다 사실.. 저걸 저때 왜 쓰는건지 그런게 이해가 잘 안되네요..ㅠ 아 그리고 RVAdapter를 MainActivity하고 BookmarkActivity에서 같이 사용되고 있는데 MainActivity에서는 context를 BookmarkActivity에서 context를 사용하면 왜 오류가 뜨고 this를 사용하는건지 궁금합니다..
-
미해결2시간으로 끝내는 코루틴
single thread에서 여러개의 co-routine ( 각각 서버연동을 수행 ) 을 순차적이 아닌 concurreny 하게 수행하게 할방법은 없나요?
single thread에서 여러개의 co-routine ( 각각 서버연동을 수행 ) 을 순차적이 아닌 concurreny 하게 수행하게 할방법은 없나요? 상황Single Thread ㄴ co-routine (1) : 서버연동 ( 사용자 정보를 요청 )ㄴ co-routine (2) : 서버연동 ( 회원등급 정보 요청) 테스트 결과co-routine (1)이 실행완료 -> co-routine(2) 수행 동시적으로 서버에 요청하지 않음 CoroutineScope(Dispatchers.Default)로 설정하여 각각 쓰레드를 생성하면 동시적으로 수행되나,이럴경우 co-routine을 사용해야 되는 의미가 필요한지 의문이 생김결국 multi thread가 발생했다는건 context swiching이 발생한다는 뜻인데. 오히려 이럴 바에는 co-routine을 사용하지 않고 multi thread만 사용해서 해당 코드를 수행하는것고 어떤 차이가 있는지잘 모르겠습니다.제 의문에 대한 명쾌한 대답을 듣고 싶습니다.
-
미해결코틀린 고급편
SynchronizedLazyImpl 함수관련 질문
태현님, 안녕하세요, 강의 잘듣고 있습니다! 9강 11분 35초 부분에서 질문이 있는데요. by Lazy안에 타고 들어가면 SynchronizedLazyImpl 함수가 스레드 세이프해서 위험할 수 있다고 말씀하셨는데 .. 어떤 의미인지 궁금해서 질문 글 올립니다. 시간되실 때 답변 부탁드려요 감사합니다!
-
해결됨코틀린 고급편
제네릭 클래스를 정의하는 경우, 반드시 변성을 고려하는 것이 바람직한가요?
안녕하세요 강사님! 코루틴 강의를 너무 재밌게 들어서 고급편까지 오게 되었습니다. 지금 변성과 관련된 내용까지 수강하였고, 이 내용을 다음과 같이 이해하였습니다.변성은 타입 인자로 전달된 클래스 간의 상속 관계를 제네릭 클래스에도 적용하기 위한 개념이다.변성이 적용된 경우, 타입 안전성을 위해 생산자 또는 소비자 역할만을 수행할 수 있다. 그런데 저는 아직 개발 경험이 부족해서 그런지, 강의에서 보여주신 Cage<T>와 같은 상황이 발생할 수 있다는 점은 공감하지만 실제로 그런 상황을 마주한 적은 없던 것 같습니다. 아무래도 제가 작성했던 로직 상 타입 인자로 전달된 클래스의 상속 관계를 제네릭 클래스에도 적용해야 할 필요성을 느껴본 적이 없어서 그랬던 것 같은데, 이렇듯 로직 상 임의의 제네릭 클래스에 변성을 줄만한 이유가 없는 상황에서도 생산자 / 소비자의 역할을 고려하여 변성을 명시하는 것이 best practice인지 궁금합니다!
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
id 이름을 줄때 @+id/id이름을 꼭 넣어줘야 하나요?
안녕하세요 강사님강의 재미있게 듣고 있습니다.다름이 아니라 @+id를 만들면서 궁금한게 생겼는데 @+id는 반드시 필수적으로 들어가야하는 걸까요? 아니면 html처럼 이름만 줄수 있는 방법이 있는지 궁금합니다
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
/v2/index.html로 책 등록시 서버에 연결이 불가능하거나, 네트워크 오류입니다. 라고 뜹니다ㅠㅠ
안녕하세요 최태현 강사님!강의 잘보고있습니다 : )다름이 아니라 제가 기존에 oracle을 사용하고 있어서 server port는 8089로 설정해서 사용하고 있습니다. localhost:8089/v1/index.html을 실행시켜서 사용자 등록, 책 등록을 하면 잘 실행이 되는데v2/index.html로 접속하여 책 등록을 하면 아무런 반응이 없다가 '서버에 연결이 불가능하거나, 네트워크 오류입니다.' 라는 alert 메시지를 봅니다. 이게 어떤 문제인지 알 수 있을까요??
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
데이터바인딩 gradle 오류
(사진)
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
FireBase 로드와 파일 경로 관련 질문
여기서 강의 '예제앱 만들기 1' 에서 res > layout 파일에서 xml 파일이 있어야 하는데 layaout 파일이 없어요.그리고 그 오른쪽 상단에 스타트 버튼도 비활성화 되어있는데 이것도 왜 그런지 모르겠어요.그리고plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.gms.google-services") } android { namespace = "com.example.myfirebaseapp" compileSdk = 33 defaultConfig { applicationId = "com.example.myfirebaseapp" minSdk = 24 targetSdk = 33 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.4.3" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.activity:activity-compose:1.7.0") implementation(platform("androidx.compose:compose-bom:2023.03.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") implementation(platform("com.google.firebase:firebase-bom:32.7.0")) implementation("com.google.firebase:firebase-analytics") }Firebase 로드가 조금 많이 바뀐거 같은데요, build.gradle.kts (module :app) 이 파일에 이런식으로 로드 하는게 맞나요..?
-
미해결윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming
예제 코드가 빌드가 않됩니다.
android studio giraffe 2023.3.1으로 공부하는데.강의해주신 내용과 거의 맞지 않습니다.이 정도면 강의를 내리는게 맞지 않을까요? ㅠㅠ
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
실시간데이터베이스에 안떠요..6:15초
6분15초에서 하는 list를 누르면 파이어베이스에 뭔가 생기는데 저는 안생겨요..이렇게 생기지 않습니다.....package com.bokchi.mysolelife.contentsList import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Toast import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.bokchi.mysolelife.R import com.google.firebase.Firebase import com.google.firebase.database.database class ContentListActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_content_list) val database = Firebase.database val myRef = database.getReference("message") myRef.setValue("Hello, World!") val rv : RecyclerView = findViewById(R.id.rv) val items = ArrayList<ContentModel>() items.add(ContentModel("title1", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblYPPY%2Fbtq66v0S4wu%2FRmuhpkXUO4FOcrlOmVG4G1%2Fimg.png", "https://philosopher-chan.tistory.com/1235")) items.add(ContentModel("title2", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FznKK4%2Fbtq665AUWem%2FRUawPn5Wwb4cQ8BetEwN40%2Fimg.png", "https://philosopher-chan.tistory.com/1236")) items.add(ContentModel("title3", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtig9C%2Fbtq65UGxyWI%2FPRBIGUKJ4rjMkI7KTGrxtK%2Fimg.png","https://philosopher-chan.tistory.com/1237")) items.add(ContentModel("title4", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOYyBM%2Fbtq67Or43WW%2F17lZ3tKajnNwGPSCLtfnE1%2Fimg.png", "https://philosopher-chan.tistory.com/1238")) items.add(ContentModel("title5", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fekn5wI%2Fbtq66UlN4bC%2F8NEzlyot7HT4PcjbdYAINk%2Fimg.png", "https://philosopher-chan.tistory.com/1239")) items.add(ContentModel("title6", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F123LP%2Fbtq65qy4hAd%2F6dgpC13wgrdsnHigepoVT1%2Fimg.png", "https://philosopher-chan.tistory.com/1240")) items.add(ContentModel("title7", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl2KC3%2Fbtq64lkUJIN%2FeSwUPyQOddzcj6OAkPKZuk%2Fimg.png", "https://philosopher-chan.tistory.com/1241")) items.add(ContentModel("title8", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmBh5u%2Fbtq651yYxop%2FX3idRXeJ0VQEoT1d6Hln30%2Fimg.png", "https://philosopher-chan.tistory.com/1242")) items.add(ContentModel("title9", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlOnja%2Fbtq69Tmp7X4%2FoUvdIEteFbq4Z0ZtgCd4p0%2Fimg.png", "https://philosopher-chan.tistory.com/1243")) items.add(ContentModel("title10", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNNrYR%2Fbtq64wsW5VN%2FqIaAsfmFtcvh4Bketug9m0%2Fimg.png", "https://philosopher-chan.tistory.com/1244")) items.add(ContentModel("title11", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK917N%2Fbtq64SP5gxj%2FNzsfNAykamW7qv1hdusp1K%2Fimg.png", "https://philosopher-chan.tistory.com/1245")) items.add(ContentModel("title12", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeEO4sy%2Fbtq69SgK8L3%2FttCUxYHx9aPNebNwkPcI21%2Fimg.png", "https://philosopher-chan.tistory.com/1246")) items.add(ContentModel("title13", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdIKDG%2Fbtq64M96JFa%2FKcJiYgKuwKuP3fIyviXm90%2Fimg.png", "https://philosopher-chan.tistory.com/1247")) items.add(ContentModel("title14", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFtY3t%2Fbtq65q6P4Zr%2FWe64GM8KzHAlGE3xQ2nDjk%2Fimg.png", "https://philosopher-chan.tistory.com/1249")) items.add(ContentModel("title15", "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOtaMq%2Fbtq67OMpk4W%2FH1cd0mda3n2wNWgVL9Dqy0%2Fimg.png", "https://philosopher-chan.tistory.com/1250")) val rvAdapter = ContentRVAdapter(baseContext, items) rv.adapter = rvAdapter rv.layoutManager = GridLayoutManager(this, 2) rvAdapter.itemClick = object : ContentRVAdapter.ItemClick { override fun onClick(view: View, position: Int) { Toast.makeText(baseContext, items[position].title, Toast.LENGTH_LONG).show() val intent = Intent(this@ContentListActivity, ContentShowActivity::class.java) intent.putExtra("url", items[position].webUrl) startActivity(intent) } } } }메세지 나야되는거 적었습니다...그런데도 안떠요
-
미해결2시간으로 끝내는 코루틴
suspend function의 일시 중단 여부는 어떻게 결정되나요?
안녕하세요 강사님, 좋은 강의에 항상 감사드리고 있습니다! 다른게 아니라, 강의 중 suspend function은 일시 중단 되었다가 재개될 수도 있고 / 그렇지 않을 수도 있다고 설명 주셨습니다. 그렇다면 실제로 suspend function이 일시 중단되어야 하는지 여부는 어떻게 결정되나요?단순히 suspend function 내부에서 또 다른 suspend function을 호출하기만 하면 무조건 일시 중단 되는 것인지, 아니면 Node.js 진영의 libuv 라이브러리처럼 비동기적으로 처리되어야 하는 IO 작업을 내부적으로 인지하는 방식이 별도로 구현되어 있는지 궁금합니다!
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
혹시라도 @DiplayName 어노테이션이 동작하지 않으신다면
위에 처럼[Build, Execution, Deployment > Build Tools > Gradle]의 Run tests using 설정을 '인텔리제이'로 변경하고,인텔리제이를 재시작하시면 정상동작됩니다.
-
미해결모던 안드로이드 - Jetpack Compose 입문
drawCircle( color = Color.... 부분에서 빨간줄이 ...
강사님의 노고에 다시한번 감사드리며질문드립니다 TiltScreen 부분의 Color.BlackColor.Green부분에 빨간줄이 생기는데 이유가 뭘까요 import android.app.Application import android.content.Context import android.graphics.Color import android.hardware.Sensor import android.hardware.SensorEvent import android.hardware.SensorEventListener import android.hardware.SensorManager import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.drawscope.Stroke import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import com.dongguntech.copose_tiltsensor.ui.theme.Copose_TiltSensorTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Copose_TiltSensorTheme { TiltScreen() } } } } class MainViewModel(application: Application) : AndroidViewModel(application), SensorEventListener, LifecycleEventObserver { private val _value0 = mutableStateOf(0f) val x: State<Float> = _value0 private val _value1 = mutableStateOf(0f) val y: State<Float> = _value1 private val sensorManager by lazy { application.getSystemService(Context.SENSOR_SERVICE) as SensorManager } fun registerSensor() { sensorManager.registerListener( this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL // 센서의 작동주기 ) } private fun unregisterSensor() { sensorManager.unregisterListener(this) } override fun onSensorChanged(event: SensorEvent?) { event?.let { Log.d( "MainViewModel", "onSensorChanged x: ${event.values[0]}, y: ${event.values[1]}, z: ${event.values[2]}" ) _value0.value = event.values[0] // x 값 _value1.value = event.values[1] // y 값 } } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { } override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { if (event == Lifecycle.Event.ON_RESUME) { registerSensor() } else if (event == Lifecycle.Event.ON_PAUSE) { unregisterSensor() } } } @Composable fun TiltScreen(x: Float, y: Float) { val yCoord = x * 20 val xCoord = y * 20 Canvas(modifier = Modifier.fillMaxSize()) { // 원의 중심 val centerX = size.width / 2 val centerY = size.height / 2 // 바깥 원 drawCircle( color = Color.Black, radius = 100f, center = Offset(centerX, centerY), style = Stroke() ) // 녹색 원 drawCircle( color = Color.Green, radius = 100f, center = Offset(xCoord + centerX, yCoord + centerY), ) // 가운데 십자가 drawLine( color = Color.Black, start = Offset(centerX - 20, centerY), end = Offset(centerX + 20, centerY) ) drawLine( color = Color.Black, start = Offset(centerX, centerY - 20), end = Offset(centerX, centerY + 20) ) } }
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
rv이 할때 에러가...
package com.bokchi.mysolelife.contentsList import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.recyclerview.widget.RecyclerView import com.bokchi.mysolelife.R class ContentListActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_content_list) val rv : RecyclerView = findViewById(R.id.rv) //여기 R.id.rv이 할때 rv가 에러가 나요 val items = ArrayList<String>() items.add("a") items.add("b") items.add("c") val rvAdapter = ContentRVAdapter(items) rv.adapter = rvAdapter } }왜 에러가 나는걸까요?
-
미해결[LV1] Jetpack Compose - UI 연습하기
colorList 에서 빨간줄이 ...
언제나 수고많으신 강사님늘 건강하시고 부자되세요 실행 후 아래와 같은 오류가 발생합니다 import android.graphics.Color import android.util.Size import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.dongguntech.compose_navi_graphes.ui.theme.Compose_Navi_GraphesTheme @Composable fun Graph2() { GraphPie() } @Composable fun GraphPie() { val pieSize1 = 25f val pieSize2 = 75f val colorList = listOf(Color.RED, Color.BLUE) PieChart( pieSize1, pieSize2, colorList, ) } @Composable fun PieChart( pieSize1 : Float, pieSize2 : Float, colorList : List<Color> ) { val totalSize = pieSize1 + pieSize2 BoxWithConstraints( modifier = Modifier.padding(20.dp) ) { val pieDetailSize = constraints.maxWidth.toFloat() Canvas(modifier = Modifier.size(pieDetailSize.dp)){ val sweep1 = 360 * (pieSize1 / totalSize) drawArc( color = colorList[0], startAngle = 0f, sweepAngle = sweep1, useCenter = true, size = Size(pieDetailSize, pieDetailSize) ) val sweep2 = 360 * (pieSize2 / totalSize) drawArc( color = colorList[1], startAngle = sweep1, sweepAngle = sweep2, useCenter = true, size = Size(pieDetailSize, pieDetailSize) ) } } } @Preview(showBackground = true) @Composable fun Graph2Preview() { Compose_Navi_GraphesTheme { Graph2() } }위 코드중에서 아래 캡쳐화면부분중에서colorList 에서 빨간줄 이 생기네요 또 실행하면 아래와 같은 오류가 발생합니다
-
해결됨냉동코더의 알기 쉬운 Modern Android Development 입문
RecyclerView.Adapter vs ListAdpater
안녕하세요.ListAdapter로 리사이클러뷰를 생성할 때의 장점으로는 notify관련 함수를 개발자가 일일이 설정해줄 필요가 없고, DiffUtil을 통해 데이터 셋의 차이를 빠르게 계산해준다는 점이 있다라고 말씀해주셨는데 ... 그럼 기존의 Recyclerview.Adapter는 사용하지 않는 편이 더 좋은걸까요? 아니면 ListAdapter에 이러한 장점들이 있음에도 불구하고 Recyclerview.Adapter가 꼭 쓰여야하는 특별한 상황이 남아있을까요?