묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[중급편] 친절한 JETPACK 개론 <하> (Android Kotlin)
DataStoreEx 파트 class MyDataStore(context: Context) { 수정 제안)
기존 : 지역 변수DataStoreEx 파트 class MyDataStore {... private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")...}제안 : 전역 변수로 변경private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")DataStoreEx 파트 class MyDataStore {...} 위 내용을 코딩중 Context.dataStore은 전역 변수 또는 싱글톤으로 제작 해야 안정적으로 보입니다 . 예를 들어서 Activity안에 위 클래스를 생성하는 코드를 작성한 후 동작 하면 일단은 동작 합니다.하지만 다시 Activity에 진입하면 에러가 납니다.DataStore version 1.0.0입니다. 왜 그런지 찾아 보니버전 1.0.0-alpha072021년 2월 24일androidx.datastore:datastore-*:1.0.0-alpha07이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.API 변경사항Context.createDataStore 확장 함수를 삭제하고 globalDataStore 속성 위임으로 대체했습니다. kotlin 파일의 최상위 수준에서 globalDataStore를 한 번 호출합니다. 예:val Context.myDataStore by dataStore(...) kotlin 파일의 최상위 수준에 배치하면 이 인스턴스가 하나만 생깁니다. (I57215, b/173726702)RxDataStore 함수는 이제 DataStore의 확장 함수 대신 RxDataStore 클래스에 있습니다. (Idccdb, b/177691248)EncryptedSharedPreferences를 DataStore로 이전(또는 SharedPreferences를 직접 부팅)하려는 경우 이제 SharedPreferences를 삽입할 수 있는 새로운 SharedPreferencesMigration 생성자를 사용하면 됩니다. (I8e04e, b/177278510)================================버그 수정동일한 파일에 활성 DataStore가 여러 개 있는 경우 이제 DataStore에서 예외가 발생합니다. DataStore를 싱글톤으로 관리하지 않았거나 한 파일의 DataStore 인스턴스 두 개가 동시에 활성화되지 않도록 조치하지 않은 경우 이제 DataStore를 읽거나 DataStore에 쓸 때 예외가 발생할 수도 있습니다. DataStore를 싱글톤으로 관리하면 해결할 수 있습니다. (Ib43f4, b/177691248)호출자 범위 취소 시의 취소 동작을 수정합니다. (I2c7b3) 라고 적혀 있네요 ... 그래서 전 Context.myDataStore를 전역 변수로 수정하고 테스트 했는데 정상적으로 동작 되는것을 확인 했습니다. 이상입니다.
-
해결됨아이비의 안드로이드 드릴
아이비 선생님, 학습자료는 어디서 다운받을 수 있나요?
안녕하세요. 아이비 선생님, 수강생 류지영입니다.강의소개 페이지에서 안내해주신 학습자료는 어디서 다운받을 수 있나요? 😀 학습 자료안드로이드 프로젝트 3개 구현 코드 Figma 프로젝트 링크개념 학습을 위한 예제 코드
-
미해결모던 안드로이드 - Jetpack Compose 입문
val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요
늘 수고많으신 강사님의 노고에 감사드립니다아래 코드중 val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요 class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val viewModel = viewModel<MainViewModel>() HomeScreen(viewModel = viewModel) } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen(viewModel: MainViewModel) { val focusManager = LocalFocusManager.current val (inputUrl, setUrl) = rememberSaveable { mutableStateOf("https://www.google.com") } val scaffoldState = rememberScaffoldState() Scaffold ( topBar = { TopAppBar( title = { Text("나의 웹브라우져")}, actions = { IconButton(onClick = { viewModel.undo() }){ Icon( imageVector = Icons.Default.ArrowBack, contentDescription = "back", tint = Color.Black ) } IconButton(onClick = { viewModel.redo() }){ Icon( imageVector = Icons.Default.ArrowForward, contentDescription = "forward", tint = Color.Black ) } } ) } ) { paddingValues -> Column( modifier = Modifier .padding(16.dp) .fillMaxSize() ) { OutlinedTextField( value = inputUrl, onValueChange = setUrl, label = { Text("https://")}, modifier = Modifier .padding(paddingValues) .fillMaxWidth(), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = { viewModel.url.value = inputUrl focusManager.clearFocus() }), ) Spacer(modifier = Modifier.height(16.dp)) MyWebView(viewModel = viewModel) } } } @Composable fun MyWebView(viewModel: MainViewModel) { val scope = rememberCoroutineScope() AndroidView( modifier = Modifier.fillMaxSize(), factory = { WebView(it).apply { settings.javaScriptEnabled = true webViewClient = WebViewClient() loadUrl("https://google.com") } }, update = { webView -> webView.loadUrl(viewModel.url.value) scope.launch{ viewModel.undoSharedFlow.collectLatest { if(webView.canGoBack()) { webView.goBack() } } } scope.launch{ viewModel.redoSharedFlow.collectLatest { if(webView.canGoForward()) { webView.goForward() } } } }, )
-
미해결모던 안드로이드 - Jetpack Compose 입문
나만의 웹브라우져 02 코드실행시 에뮬레이터에 따라
Galaxy Nexus API 34 일 경우는 정상적으로 실행되나Pixel 7 Pro APi 34 일 경우는 실행중에 에뮬레이터가 사라집니다 class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HomeScreen() } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen() { Scaffold ( topBar = { TopAppBar( title = { Text("")}, actions = { IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowBack, contentDescription = "back", tint = Color.White ) } IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowForward, contentDescription = "forward", tint = Color.White ) } } ) } ) { paddingValues -> Column( modifier = Modifier .padding(16.dp) .fillMaxSize() ) { OutlinedTextField( value = "", onValueChange = {}, label = { Text("https://")}, modifier = Modifier .padding(paddingValues) .fillMaxWidth(), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = {}), ) Spacer(modifier = Modifier.height(16.dp)) MyWebView() } } } @Composable fun MyWebView() { AndroidView( modifier = Modifier.fillMaxSize(), factory = { WebView(it).apply { settings.javaScriptEnabled = true webViewClient = WebViewClient() loadUrl("https://google.com") } }, update = {}, ) }
-
미해결[중급편] 친절한 JETPACK 개론 <상> (Android Kotlin)
에러
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.DataBinding 과 data class 강의 듣고잇는중입니다xml에서 버튼에 myClick을 연결시킨 부분부터 애뮬레이터에서 버튼을 누르면 애플리케이션이 자동종료됩니다.코드를 똑같이 따라쳣는데 왜 이렇게 된건지모르겟습니다.에러내용입니다(코드내용 똑같다고 보면 될거같습니다.) <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="user" type="com.actual.jetpack_ex_databinding2.Person" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:id="@+id/test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text= "@{user.name}" android:textSize="50sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text= "@{Integer.toString(user.age)}" android:textSize="50sp" /> <TextView android:textSize="100dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.age > 30 ? `나이 많음` : `나이 적음`}" /> <Button android:text = "btn" android:onClick="myClick" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </layout> package com.actual.jetpack_ex_databinding2 import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.View import androidx.databinding.DataBindingUtil import com.actual.jetpack_ex_databinding2.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding : ActivityMainBinding var testCount = 20 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main ) // binding.test.text= "바뀐 텍스트" val person = Person("개복치", 20) binding.user= person fun myClick(view : View) { Log.d("MainActivity", "onClick") testCount++ val person = Person("개복치", testCount) binding.user = person } } } package com.actual.jetpack_ex_databinding2 data class Person ( val name : String, val age : Int )FATAL EXCEPTION: main Process: com.actual.jetpack_ex_databinding2, PID: 7731 java.lang.IllegalStateException: Could not find method myClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class com.google.android.material.button.MaterialButton at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:506) at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:464) at android.view.View.performClick(View.java:7659) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1213) at android.view.View.performClickInternal(View.java:7636) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0) at android.view.View$PerformClick.run(View.java:30156) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8177) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) 그전까지는 잘 되는거로 보아 onClick="myClick" 부분이 문제인것같은데 잘 못찾겟습니다.
-
미해결모던 안드로이드 - Jetpack Compose 입문
나만의 웹브라우져 01 코딩 후 실행하면 아래와 같은 오류가 뜨네요
We recommend using a newer Android Gradle plugin to use compileSdk = 34 This Android Gradle plugin (8.0.2) was tested up to compileSdk = 33. You are strongly encouraged to update your project to use a newer Android Gradle plugin that has been tested with compileSdk = 34. If you are already using the latest version of the Android Gradle plugin, you may need to wait until a newer version with support for compileSdk = 34 is available. To suppress this warning, add/update android.suppressUnsupportedCompileSdk=34 to this project's gradle.properties. 안드로이드 스튜디오버젼이 강사님과 달라 아직 헤메고 있습니다MainActivity.ktimport android.os.Bundle import android.webkit.WebView import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowForward import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HomeScreen() } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen() { Scaffold ( topBar = { TopAppBar( title = { Text("")}, actions = { IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowBack, contentDescription = "back", tint = Color.White ) } IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowForward, contentDescription = "forward", tint = Color.White ) } } ) } ) { paddingValues -> OutlinedTextField( value = "", onValueChange = {}, label = { Text("https://")}, modifier = Modifier .padding(paddingValues) .fillMaxWidth(), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = {}), ) Spacer(modifier = Modifier.height(16.dp)) MyWebView() } } @Composable fun MyWebView() { AndroidView( modifier = Modifier.fillMaxSize(), factory = { WebView(it).apply { loadUrl("https://google.com") } }, update = {}, ) } build.gradle(Project)plugins { id 'com.android.application' version '8.0.2' apply false id 'com.android.library' version '8.0.2' apply false id 'org.jetbrains.kotlin.android' version '1.7.20' apply false } build.gradle(Module :app)plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' } android { namespace 'com.dongguntech.compose_mywebbrowser' compileSdk 34 defaultConfig { applicationId "com.dongguntech.compose_mywebbrowser" minSdk 26 targetSdk 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary true } } buildTypes { release { minifyEnabled 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.10' } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion '1.4.3' } packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } } dependencies { var lifecycle_version = "2.5.1" // 2.6.2 버젼은 오류가 남 var arch_version = "2.1.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:2.2.0:78") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") implementation "androidx.compose.animation:animation:1.5.4" implementation "androidx.compose.foundation:foundation:1.5.4" implementation "androidx.compose.material:material:1.5.4" implementation "androidx.compose.material3:material3:1.1.2" implementation "androidx.compose.runtime:runtime:1.5.4" implementation "androidx.compose.ui:ui:1.5.4" implementation 'androidx.compose.ui:ui-graphics' implementation 'androidx.compose.ui:ui-tooling-preview' implementation 'androidx.core:core-ktx:1.12.0' implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0') implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2' implementation 'androidx.activity:activity-compose:1.8.1' implementation "androidx.wear.compose:compose-foundation:1.2.1" implementation "androidx.wear.compose:compose-material:1.2.1" implementation "androidx.wear.compose:compose-navigation:1.2.1" debugImplementation 'androidx.compose.ui:ui-tooling' debugImplementation 'androidx.compose.ui:ui-test-manifest' implementation platform('androidx.compose:compose-bom:2022.10.00') 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:2022.10.00') androidTestImplementation 'androidx.compose.ui:ui-test-junit4' } 참고로 제가 사용중인 안드로이드 스튜디오버젼은Android Studio Flamingo | 2022.2.1 Patch 2입니다
-
미해결[LV1] Jetpack Compose - UI 연습하기
이력서앱의 화면이 강사님과는 너무 달라서 어찌 ???
화면이 강의내용과 너무달라 강사님의 강의화면과 같이 고치려면 아직 초보라서 ㅠㅠㅠ 저의 코드는 아래와 같습니다import android.content.Intent import android.net.Uri import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Card import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.Button import androidx.compose.material3.CardDefaults import androidx.compose.material3.Divider import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyResume() } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun MyResume() { Scaffold( topBar = { TopAppBar( title = { Text("이력서만들기") }, ) } ) { paddingValues -> MyResumeContent(paddingValues) } } @Composable fun MyResumeContent(paddingValues: PaddingValues) { var context = LocalContext.current Card( modifier = Modifier .padding(20.dp) .fillMaxWidth(), colors = CardDefaults.cardColors(Color.LightGray), elevation = CardDefaults.cardElevation( defaultElevation = 10.dp // 테두리음영의 농도 ), shape = RoundedCornerShape(30.dp) // 둥근모서리(5.dp)를 줌 ) { Column( modifier = Modifier .fillMaxSize() .padding(20.dp), ){ Image( painter = painterResource(id = R.drawable.mypic), contentDescription = "내사진", modifier = Modifier .size(150.dp) .clip(CircleShape) .align(Alignment.CenterHorizontally) ) Spacer(Modifier.height(20.dp)) Text( "자기소개", fontSize = 23.sp, modifier = Modifier .align(Alignment.CenterHorizontally), ) Spacer(Modifier.height(10.dp)) Text( "안녕하세요 저는 이동검입니다. 언제나 긍정적으로 살기를 노력하고 이웃과 사회와 인류를 이롭게하는 삶이 되기를 원합니다 ", fontSize = 19.sp, modifier = Modifier .align(Alignment.CenterHorizontally), ) Spacer(Modifier.height(10.dp)) Text( "하지만 떄떄로 먹고사는 문제에 부딫쳐 초심을 잃어버릴 때도 있었지요 ... ", color = Color.Red, fontSize = 17.sp, modifier = Modifier .align(Alignment.CenterHorizontally), ) Spacer(Modifier.height(10.dp)) Divider( // 줄간격내에 선긋기 thickness = 1.dp, color = Color.Gray ) Spacer(Modifier.height(10.dp)) Text( "핸드폰번호 : 010 - 1234 - 5678", fontSize = 17.sp, modifier = Modifier .padding(20.dp) ) Text( "이메일 : abc@google.com", fontSize = 17.sp, modifier = Modifier .padding(20.dp) ) Spacer(Modifier.height(10.dp)) Button( onClick = { var intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel: 01012345678")) context.startActivity(intent) }, modifier = Modifier.fillMaxSize(), ){ Text("전화걸기") } Button( onClick = { var intent = Intent(Intent.ACTION_SENDTO) .apply { data = Uri.parse("mailto:abc@google.com") } context.startActivity(intent) }, modifier = Modifier.fillMaxSize(), ){ Text("메일보내기") } } } }
-
미해결[LV1] Jetpack Compose - UI 연습하기
TopAppBar 관련부분에 빨간줄이 ..
실행하면Type mismatch: inferred type is Unit but Modifier was expected : 27즉 27번 라인에서 오류가 난다네요ㅠㅠㅠ
-
미해결[중급편] 친절한 JETPACK 개론 <하> (Android Kotlin)
강의에서 말씀하시는 레포지토리가
페이징소스 말씀하시는건가요?? 페이징 강의에서 레포지토리 활용하는건 계속 못 본 것 같아서요 ㅠㅠ
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
Flows 와 Coroutine
안녕하세요, Flows 강의를 듣는와중에 문의사항이 있어 질문드립니다. 강의 내용을 캡쳐한 것인데요.여기서 launch{ } 를 통해 코루틴이 생성되고 simple() Flow 가 실행이 되는데 flow도 코루틴으로 이루어져 있어서 마치 동시에 실행되는 것처럼 보이는게 제대로 이해한건지 궁금합니다.만약 simple() flow 대신 println("test") 와 같은 메인Thread 를 사용하는 함수가 작성되어 있었다면 test가 먼저 찍히고 I'm not blocked 1 이 먼저 나오는게 맞을까요??아니면 I'm not blocked 1 이 나오고 test 가 찍히는게 맞을까요..?
-
미해결[LV1] Jetpack Compose - UI 연습하기
Retrofit 관련 url 주소를 적을 때 주의사항입니다
// HTTP 로 요청이 필요한 부분을 interface 로 정의interface MyApi { @GET("/posts/1")// GET 요청임을 알리고, 서버내의 경로(path)를 지정 // BASE_URL 이 https://jsonplaceholder.typicode.com 일 경우 @GET("/posts/1") 로 적고// BASE_URL 이 https://jsonplaceholder.typicode.com/ 일 경우 @GET("posts/1") 로 적는다suspend fun getPost1() : Response<Post> } 위와 같이 정리해 보았는데 이게 맞는지 ㅎㅎㅎ
-
미해결모던 안드로이드 - Jetpack Compose 입문
비만도계산기 로직작성 에서 문제가 발생했어요 ^^
강사님 해당 프로젝트를 실행하니 에뮬화면이 검게 변하면서아무것도 보이지 않습니다제가 어떤 부분이 잘못 코딩하였는지 ..... 구글드라이브에 해당 프로젝트를 올려두었습니다 https://drive.google.com/file/d/15GTTot8jci11xvK1OFpTiOVw2HYTKOZ4/view?usp=drive_link
-
미해결[LV1] Jetpack Compose - UI 연습하기
Retrofit 관련 Logcat 화면에 아래 예외가 출력
build.gradle 에 아래를 추가한 후 sync now 하고나서 implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-gson:2.9.0") 아래는 전체코드입니다class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val coroutineScope : CoroutineScope = rememberCoroutineScope() val retrofitInstance = RetrofitInstance.getInstance().create(MyAPI::class.java) Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center, ) { Button( onClick = { coroutineScope.launch { val response : Response<Post> = retrofitInstance.getPost1() Log.d("MainActivity", response.body().toString()) } } ) { Text( "Call API" ) } } } } } data class Post( val userId : Int, val id : Int, val title : String, val body : String, ) object RetrofitInstance { val BASE_URL = "https://jsonplaceholder.typicode.com/posts/1/" val client = Retrofit .Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() fun getInstance() : Retrofit { return client } } interface MyAPI { @GET("posts/1") suspend fun getPost1() : Response<Post> } 위를 실행하니Logcat 화면에 아래 예외가 출력되고 데이터를 얻어오지 못하는 군요RemoteConnection failed to initialize: RemoteConnection failed to open pipeFailed to open QEMU pipe 'qemud:network': Invalid argumentsendWakeUpEvent called on SchedulerClientBroadcastStrategyGCM_HB_ALARM release without a matched acquire! Couldn't load memtrack module 수고많으신 강사님늘 건강하시고 부자되세요
-
미해결[LV1] Jetpack Compose - UI 연습하기
Modifier.weight의 토탈
5:03에서 토탈이 14라고 하셨는데 왜 14인지 이해가 안가서 질문 남깁니다!
-
미해결[LV1] Jetpack Compose - UI 연습하기
에뮬에 오류가 뜨네요(WebView)
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyWebView("https://www.daum.net/") } } } @Composable fun MyWebView(url : String) { AndroidView(factory = { WebView(it).apply { loadUrl(url) } }) }강사님의 노고에 다시한번 감사드립니다위의 코드를 작성한 후 AndroidManifest.xml 의 내용에 <uses-permission android:name="android.permission.INTERNET" /> <application ... android:usesCleartextTraffic="true" > 두가지를 추가한 후 앱을 실행하니 에뮬에 아래와 같은 오류가 뜨네요
-
미해결모던 안드로이드 - Jetpack Compose 입문
viewModel() 오류 추가질문입니다
dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.lifecycle:lifecycle-viewmodel-compose-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.2") implementation("androidx.activity:activity-compose:1.8.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") }위와 같이 build.gradle.kts 파일내용을 변경한 후 아래아 같이 코드를 작성하면 34번줄 viewModel() 에서 오류가 발생합니다 또 viewModel() 에서 Alt+Enter 키를 누르면 아래처럼여러개의 항목을 선택하는 창이 뜨는데 이중 어느것을 선택해야 하는지 ...
-
미해결[LV1] Jetpack Compose - UI 연습하기
강의자료실 주소를 알고싶어요
강의자료실 주소를 알고싶어요
-
미해결[LV1] Jetpack Compose - UI 연습하기
implementation 'androidx.navigation:navigation-compose:2.7.4' 입력시 발생하는 에러 문의합니다.
Navigation 을 따라하는 중 'implementation 'androidx.navigation:navigation-compose:2.7.4' 를 추가하여 rememberNavController 가 나오지 않아 Sync Project with gradle file 을 진행한 후 remembernavController 는 import 되었습니다. 하지만 build 시 아래와같은 에러로 문제가 발생합니다. Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations$ReflectSdkVersion found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations$ReflectSdkVersion found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.io.path.DirectoryEntriesReader found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.ExperimentalPathApi found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.FileVisitorBuilder found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.FileVisitorBuilderImpl found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.FileVisitorImpl found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.LinkFollowing found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathNode found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathRelativizer found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathTreeWalk found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathTreeWalk$bfsIterator$1 found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathTreeWalk$dfsIterator$1 found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathTreeWalkKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathWalkOption found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathsKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathsKt__PathReadWriteKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.io.path.PathsKt__PathUtilsKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.jdk7.AutoCloseableKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)Duplicate class kotlin.jvm.jdk8.JvmRepeatableKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.jvm.optionals.OptionalsKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.random.jdk8.PlatformThreadLocalRandom found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.streams.jdk8.StreamsKt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$1 found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$2 found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$3 found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$4 found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.text.jdk8.RegexExtensionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)Duplicate class kotlin.time.jdk8.DurationConversionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20) android studio 에 기본적으로 있는 것을 사용하고 2.7.4 버전도 제공된 것을 import 한것인데 dependency resolution errors 가 발생하고 있어서요. 이를 해결할 방법이 있을까요?감사합니다.
-
미해결모던 안드로이드 - Jetpack Compose 입문
viewModel: MainViewModel = viewModel() 에 오류있습니다
39번줄 = viewModel() 와 48번줄 .observeAsState("LiveData") 에서 빨간줄이 생기고 실행하면 아래 오류가 발생합니다수고많으신 강사님 늘 건강하시고 부자되세요
-
미해결모던 안드로이드 - Jetpack Compose 입문
AAR metadata 관련오류발생
class MainViewModel : ViewModel() { val data = mutableStateOf("Hello") } class MainActivity : ComponentActivity() { private val viewModel by viewModels<MainViewModel>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text( viewModel.data.value, fontSize = 30.sp ) Button(onClick = { viewModel.data.value = "World" }) { Text("변경") } } } } }강사님 늘 건강하시고 부자되세요 위 코드를 실행하니 아래오류가 발생하네요 3 issues were found when checking AAR metadata: