묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스 회원가입 구현 부분에서 emailArea 와 passwordArea, passwordArea2 이 부분이 빨간색이에요
파이어베이스 회원가입 구현 부분에서 emailArea 와 passwordArea, passwordArea2 이 부분이 빨간색이며 Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable이런 오류가 나요. ㅜㅜ 그리고 package com.juwon.mysolelife.auth import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import androidx.databinding.DataBindingUtil import com.google.firebase.Firebase import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.auth import com.juwon.mysolelife.R import com.juwon.mysolelife.databinding.ActivityIntroBinding class JoinActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth private lateinit var binding: ActivityIntroBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_join) setContentView(R.layout.activity_join) binding.joinBtn.setOnClickListener { val email = binding.emailArea.text.toString() val password1 = binding.passwordArea.text.toString() val password2 = binding.passwordArea2.text.toString() if(email.isEmpty()) { Toast.makeText(this, "이메일을 입력 해 주세요", Toast.LENGTH_LONG).show() } } auth = Firebase.auth // auth.createUserWithEmailAndPassword(email, password) auth.createUserWithEmailAndPassword("sjw9179@kakao.com", "tlswndnjs1!") .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Toast.makeText(this, "성공", Toast.LENGTH_LONG).show() } else { Toast.makeText(this, "실패", Toast.LENGTH_LONG).show() } } } }이런식으로 코드가 짜여있습니다.
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
moshi관련 질문입니다.
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlin-kapt") id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") } android { namespace = "com.example.booksearchapp" compileSdk = 34 defaultConfig { applicationId = "com.example.booksearchapp" minSdk = 23 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } 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 { buildConfig = true viewBinding = true } } dependencies { implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.11.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.legacy:legacy-support-v4:1.0.0") // Retrofit implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-moshi:2.9.0") // Okhttp // define a BOM and its version implementation(platform("com.squareup.okhttp3:okhttp-bom:4.12.0")) // define any required OkHttp artifacts without version implementation("com.squareup.okhttp3:okhttp") implementation("com.squareup.okhttp3:logging-interceptor") // Moshi implementation("com.squareup.moshi:moshi-kotlin:1.14.0") kapt("com.squareup.moshi:moshi-kotlin-codegen:1.14.0") // Lifrcycle implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0") implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0") // Coroutines implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") // Coil implementation("io.coil-kt:coil:2.5.0") // RecyclerView implementation("androidx.recyclerview:recyclerview:1.3.2") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") } 위처럼 설정을 하고 빌드를 할때 아래와 같은 에러가 발생합니다.Execution failed for task ':app:kaptDebugKotlin'.> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction > java.lang.reflect.InvocationTargetException (no error message)jdk는 17을 사용하고 있습니다.11로 설정하면 아래와 같은 에러가 나옵니다.is project is configured to use an older Gradle JVM that supports up to version 11 but the current AGP requires a Gradle JVM that supports version 17. 어느 부분을 수정해야될 지 모르겠습니다.. ㅜㅜ
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스 SDK 구정이 또 달라져서 보라고 주신 문서들에도 안 나와있습니다.
파이어베이스 SDK 구정이 또 달라져서 보라고 주신 문서들에도 안 나와있습니다.
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
종속성 충돌 질문
firebase 관련 패키지 충돌에 관한 주요 공지에서 코드대로 맞춘 다음 flutter pub get을 했는데 firebase_core의 버전을 업그레이드나 firebase_auth의 버전을 다운그레이드하라는 메세지가 떴습니다... 알려준대로 다운그레이드하거나 업그레이드 진행해도 될까요?
-
미해결Flutter 중급 2편 - 실전 앱 개발 - 미국 주식 앱 (with 클린 아키텍처)
개남님 질문있씁니다! company_listing_entitiy가 왜 엔티티 인가요?
개남님 안녕하세요. 두 가지 여쭐 것이 있습니다!도메인 영역에 entitiy가 아니라 model 폴더를 위치하셨던데, freezed로 생성한 이상 각종 메소드가 들어가기에 "정석적인 속성만 존재하는 entitiy라고 보기엔 조금 그래서 model로 구분하셨구나~"하고 넘어갔습니다. 맞을까요?? 글구 company_listing_entitiy는 data 레이어에 속하는데 왜 entity인지 궁금합니다. 제가 아직 강의 초반이라 이해가 부족한 것인지.. 보통 data 레이어에서 api통신/로컬db와 관련된 비즈니스 로직에 사용할 model을 정의하고, 맵퍼가 도메인의 entity로 반환해 주는 구조로 이해했는데 이러면 CompanyListingEntity가 아니라, CompanyListingModel이 맞지 않나요? 제가 너무 시야를 좁게 보는 것 같기도하고.. 헷갈려 여쭙니다!
-
미해결[LV1] Jetpack Compose - UI 연습하기
HorizontalPagerIndicator 의 pagerState = pageState, 에서 빨간줄이 생깁니다
MainActivity.ktimport androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.runtime.getValue import androidx.compose.ui.text.font.FontWeight import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.material3.ExperimentalMaterial3Api import com.google.accompanist.pager.ExperimentalPagerApi import com.google.accompanist.pager.HorizontalPagerIndicator class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ShopEx() } } } @Composable fun ShopEx() { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Column() { TopLogo() TopSearchBar() TopBanner() } } } @Composable fun TopLogo(){ Box(){ Box( modifier = Modifier .fillMaxWidth() .height(60.dp), contentAlignment = Alignment.Center ){ Row(){ Text("C", fontSize = 30.sp, color= Color(0xff964b00)) Text("O", fontSize = 30.sp, color= Color(0xff964b00)) Text("U", fontSize = 30.sp, color= Color(0xff964b00)) Text("P", fontSize = 30.sp, color= Color.Red) Text("A", fontSize = 30.sp, color= Color.Yellow) Text("N", fontSize = 30.sp, color= Color.Green) Text("G", fontSize = 30.sp, color= Color.Blue) } Icon( imageVector = Icons.Default.ShoppingCart, // ImageVector 아이콘지정 contentDescription = "쇼핑", modifier = Modifier .align(Alignment.CenterEnd) .padding(end = 20.dp) ) } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun TopSearchBar(){ var inputText by remember { mutableStateOf("") } Box( modifier = Modifier .fillMaxWidth() .border(1.dp, Color.Gray, shape = RoundedCornerShape(10.dp)) .padding(start = 20.dp, end = 20.dp), contentAlignment = Alignment.Center ){ TextField( value = inputText, onValueChange = { inputText = it }, leadingIcon = { Icon(imageVector = Icons.Default.Search, contentDescription = null)}, placeholder = { Text(text = "쿠팡에서 검색하세요")}, modifier = Modifier.fillMaxWidth(), colors = TextFieldDefaults.textFieldColors( containerColor = Color.White, focusedIndicatorColor = Color.Transparent, unfocusedIndicatorColor = Color.Transparent ) ) } } @OptIn(ExperimentalFoundationApi::class, ExperimentalPagerApi::class) @Composable fun TopBanner(){ val pageCount = 5 val pageState = rememberPagerState() val textList = listOf( "광고 문구1", "광고 문구2", "광고 문구3", "광고 문구4", "광고 문구5" ) Box( modifier = Modifier.padding(top = 20.dp) ) { HorizontalPager( pageCount = pageCount, state = pageState, modifier = Modifier .fillMaxSize() .height(200.dp) .background(Color.LightGray), ) { page -> Text( text = textList[page], fontSize = 30.sp, fontWeight = FontWeight.ExtraBold, ) } HorizontalPagerIndicator( pagerState = pageState, modifier = Modifier .align(Alignment.BottomCenter) .padding(15.dp) ) } } @Preview(showBackground = true) @Composable fun GreetingPreview() { ShopExTheme { ShopEx() } } build.gradle.kts dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.activity:activity-compose:1.8.2") 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") implementation ("com.google.accompanist:accompanist-pager:0.20.2") implementation ("com.google.accompanist:accompanist-pager-indicators:0.20.2") implementation ("com.google.accompanist:accompanist.pager.PagerState") 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") }
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
트와이스 사진첩 강의에서
원래 기기에 따라 이미지가 찌그러져 나오는 경우도 있나요?
-
미해결Flutter로 SNS 앱 만들기
저는 키보드 동작이 안돼는데 원래 그런가요.
저는 키보드 동작이 안돼는데요 원래 그런가요.에뮬레이터로 테스트 하는데 이상은 없지만 불편해서요.
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래 코드를 private fun searchBooks() { var startTime = System.currentTimeMillis() var endTime: Long binding.etSearch.text = Editable.Factory.getInstance().newEditable(searchViewModel.query) binding.etSearch.addTextChangedListener { text: Editable? -> endTime = System.currentTimeMillis() if (endTime - startTime >= SEARCH_BOOKS_TIME_DELAY) { text?.let { val query = it.toString().trim() if (query.isNotEmpty()) { searchViewModel.searchBooksPaging(query) searchViewModel.query = query } } } startTime = endTime } }아래처럼 바꿔봤는데 입력 시마다 runnable을 매번 생성하는데 문제 되진 않을까요? 코틀린에 익숙치 않아서 더 좋은 방법이 있다면 알고 싶습니다. private var handler: Handler = Handler(Looper.getMainLooper()) var runnable: Runnable? = null private fun searchBooks() { binding.etSearch.addTextChangedListener { text: Editable? -> if (runnable != null) { handler.removeCallbacks(runnable!!) } // 텍스트 입력 후 N 초 간 입력 없으면 검색 실행 runnable = Runnable { text?.let { Log.d(TAG, "text:$it"); val query = text.toString().trim() if (query.isNotEmpty()) { bookSearchViewModel.searchBooks(text.toString()) bookSearchViewModel.query = query } } } handler.postDelayed(runnable!!, Constants.SEARCH_BOOKS_TIME_DELAY) } }
-
해결됨Flutter로 SNS 앱 만들기
Firebase StreamBuilder 사용은 왜 안 하나요?
댓글 불러오는 과정을 보고 있는데, 지금까지 각 모델(feed, comment) 전부 Firebase에서 전체 document 받아와서 list로 변환 후, update 하고나면 Firebase에 업로드하는데 그와 동시에 screen에 반영하기 위해 새로 get하여 list를 만들어서 표시해주는 것 같습니다. Firebase StreamBuilder를 사용하면 실시간으로 모든 변화들이 바로 업데이트 되어서 기존에 많이 썼는데, 혹시 이렇게 하지 않는 이유가 있을까요? (데이터 통신이 불필요하게 많이 일어나서 트래픽/요금 등의 문제가 있다든지 하는 현실적인 이유가 있는지 궁금했습니다)
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
타이틀바
저 앱실행시킬때 타이틀바를 없애는 부분을 보고있는데요. 저는 앱실행시키면 처음부터 타이틀 바가 안나오고 theme.xml도 영상과는 다르게 되어 있는데 그럼 굳이 안해도 상관 없는건가요?버전은 androidstudio hedgehog입니다.
-
해결됨Flutter로 SNS 앱 만들기
저는 왜 signUp함수가 안나와요.
(사진)
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
if문 중복 안하는 방법
선생님이 알려주시는 대로 한번 코드를 작성하고,어떻게하면 조금 더 간편하고 읽기 쉬운 코드를 만들수있을까고민해 봤습니다. if문을 통한 것 보다 when절이 나을꺼같아 해봤는데 앱은 잘 작동하는데 이런식으로 써도 될지요~?? 남은 강의도 열심히 잘 들어볼께요! package com.example.twice import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ImageView class ImageInsideActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_image_inside) val getData = intent.getStringExtra("data") val memberImage = findViewById<ImageView>(R.id.memberImageArea) when(getData){ "1" -> memberImage.setImageResource(R.drawable.member_1) "2" -> memberImage.setImageResource(R.drawable.member_2) "3" -> memberImage.setImageResource(R.drawable.member_3) "4" -> memberImage.setImageResource(R.drawable.member_4) "5" -> memberImage.setImageResource(R.drawable.member_5) "6" -> memberImage.setImageResource(R.drawable.member_6) "7" -> memberImage.setImageResource(R.drawable.member_7) "8" -> memberImage.setImageResource(R.drawable.member_8) "9" -> memberImage.setImageResource(R.drawable.member_9) } } }
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
안드로이드에서 아키텍처 패턴
안녕하세요. 강의 잘 듣고 있습니다.안드로이드 패턴에 대해서 몇 시간동안 듣고 검색도 해보면서 이해하는 중인데 어려움이 있어 질문을 드립니다. MVC에서 그림에서 이해가 안되는 부분이 있습니다. [1] 안드로이드에서 버튼은 결국 View가 가지고 있고 이벤트는 View에 있는 버튼을 눌러서 발생하기 시작할 것 같습니다. 그럼 뷰는 입력 받은 이벤트에 대해 컨트롤러에게 전달을 해줘야할 것이고 컨트롤러는 전달 받은 이벤트에 대한 작업을 수행하고 모델에 전달 후 모델의 변경을 다시 뷰에게 전달해주는 것인데 이런 생각으로 인풋은 뷰쪽으로뷰와 컨트롤러는 쌍방향 화살표가 되어야한다고 생각했습니다. [2] MVP에 경우에 View와 Model사이 간접적 화살표가 사라졌는데, MVP에 경우에도 프레젠트를 사이에 두고 모델에 데이터가 뷰쪽으로도 이동해야만 한다고 생각이 들고 그렇다면 간접적으로 이동하는 것은 똑같으니 MVC에서 M->V 점선 화살표가 유지되어야 하는 거 아닌가 하는 생각이 들었습니다. [3] MVP에서 프레젠트가 인터페이스를 통해 뷰와 모델을 거치게 되는데[MVC] V <-> C[MVP] V <-> Interface <-> Presenter한 단계를 추가해서 의존성 주입(관심사를 세분화)라고 이해해도 될까요? 혹시나 시간이 되신다면 설명 부탁드립니다.
-
미해결[중급편] 친절한 JETPACK 개론 <상> (Android Kotlin)
안드로이드 테마 색상 오류
공부하는 프로젝트에 넣고 싶은 색상이 있는데 적용이 안됩니다. 테마를 Theme.Material3.DayNight.NoActionBar 이걸 적용중인데 회색으로 설정하면 연두색으로 나오면서 이상해서요 ㅠㅠㅠ 이거 해결 방법 없나요??ㅠㅠㅠㅠ Material3 이걸 바꾸면 머터리얼 디자인3가 자동으로 적용이 안되구요 ㅠㅠㅠ예를들면 #F0F0F0 컬러에 넣어두고 사용하면 연한 연두색으로 나옵니다
-
해결됨Flutter로 SNS 앱 만들기
provider등록중 에러 발생 되었어요.
(사진)
-
해결됨[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
Fragment 에서 다른 Activity로는 Navigation을 사용하지 않나요??
초반부를 보던 중, IntroActivity의 Fragment 사이의 이동에서는 main_nav의 action을 통해 fragment의 이동을 하는 것을 보았습니다.그런데 IntroFragment2에서 SelectActivity로 이동할 때는 Intent를 이용해 Activity를 전환하더군요. 저가 궁금한 것은 Activity1의 Fragment1에서 Activity2로 이동하고 싶은데, 이때는 Navigation을 사용하는 것이 아닌,Intent를 사용해야 하나요?즉, Acitivity 사이의 이동은 Intent만을 사용해야 하나요??
-
미해결파이어베이스(Firebase)를 이용한 웹+안드로이드 메모 어플리케이션 만들기
현재 2024.01.09 너무 오래된 강의입니다.
너무 오래된 강의입니다.버전이 많이 달라 구글검색을 오래해야합니다.
-
미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
notification 문의드립니다.
안녕하세요. 강의듣던중 notification이 제대로 작동되지 않아서 문의드립니다.강의 내용과 동일하게 소스코드를 작성했는데 알림창 시작 버튼을 누르면 알림팝업이 나오지 않습니다.강의자료에 올라온 소스코드를 그대로 실행하면 알림팝업이 잘나오는데, 제 소스코드를 실행이 제대로 작동되지 않는 것으로 봐서 설정 문제인거 같은데 어디가 문제인지 모르겠습니다ㅠ확인부탁드립니다. 소스코드 https://drive.google.com/file/d/1TuCLiaHZ6Rkijb5X8z4wbqHEw3uTjHmK/view?usp=sharing
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
버튼이 클릭된 후 아이디를 판별하는 방법
안녕하세요제가 구성한 페이지는 이렇습니다.1번메인 페이지에 버튼이 다섯개 있다면 버튼을 클릭한 후 동작은 확인 버튼 한개 들어가 있는 팝업을 띄우는 것입니다. 여기서 팝업 메세지를 각 버튼에 따라 다르게 보여주려고 하는데요. 예를들면 1번을 클릭하면 팝업에 1번 버튼을 클릭하셨습니다. 를 띄우는 식입니다. 현재 데이터 바인딩으로 구현하여서binding.btn01.setOnClickListener {} 를 다섯개 작성하여 intent.putExtra에 값을 받아서 해주고 있습니다.binding.btn1.setOnClickListener { var intent = Intent(this, PopupActivity::class.java) intent.putExtra("txt", "1번") startActivity(intent) } binding.btn2.setOnClickListener { ... } binding.btn3.setOnClickListener { ... } ... 웹개발의 자바스크립트나 제이쿼리에서 사용되는 방법처럼 버튼이 클릭되면(클래스로 지정된 여러 요소중 하나를 클릭했을때 this.id 를 가져오는 식) id 를 읽어 클릭이후 내부에서 분기문을 작성해주는 방법은 없을까요? 2번제가 아직 4번째 앱밖에 안들어봐서 뒤에 나온다면 어떤 부분에서 나오는지도 알려주시면 감사하겠습니다