묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
강의 질문이요
이 앱을 만들고 본인이 그 앱에 게시물을 올리면 자기만 볼 수 있게 할 수 있나요?? 몇 개를 올리고 자기가 올린 게시물만 모아볼 수 있게요..
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
코틀린으로 엔티티 작성
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의의 내용과 질문이 관계 없을수도 있지만 정답이 있는 부분이 아닌 것 같아 너무 궁금해서 남겨봅니다.. ㅠ 강의중에 코틀린을 사용할 때 되도록 불변으로 만드는 것이 좋다고 하셔서 User 엔티티를 이런식으로 작성했습니다. 이렇게 되면 유저의 필드를 변경하고 싶을 때 새로운 User 객체를 만들어야 합니다. 그래서 User 엔티티 안에 이런 메서드를 작성했습니다. 두 번째 방법으로 private set을 사용해서 setter만 막고 updateName 함수를 만들어줬습니다. 세 번째로 프로퍼티를 아예 private으로 설정하고 getter와 updateName 함수를 만들어줬습니다. 네 번째는 그냥 var로 만들어 기본 생성되는 getter와 setter를 사용한다 입니다. 정답이 있는 문제는 아니지만 저는 2, 3번이 좋은 방법이라는 생각이 듭니다. 그런데 자바의 저런 보일러 플레이트 코드들을 줄일 수 있는 것이 코틀린의 장점중 하나인데, 저렇게 사용하면 무슨 소용이 있나 싶기도 합니다. 그러다보니 코틀린은 getter, setter를 사용하는 것을 권장하게 설계되어있나? 라는 생각이 듭니다. 1번이나 4번 처럼 사용하는 것이 좀 더 코틀린스러운 개발 방법일까요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
프래그먼트 바인딩
똑같이 따라했는데 이런 오류가 생겼어요,, 검색해도 잘 안 나오고 뭐가 문제인지 모르겠습니다ㅠㅠ
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
함수 null 질문드립니다.
@nullable public String getName() { return name; } - 위 함수는 리턴타입이 reference 타입이니 어노테이션을 지우면 참조형식이 될거 같은데 플랫폼 타입이 되는데 함수만 그런 규칙이 적용이 되는건가요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
안녕하세요 질문이 있습니다!
안녕하세요~ 질문이있는데용 OPEN 키워드를 사용하지않고 사진의 코드를 실행시키면 값이 300으로 나오게되는데요~ Derived(300) 으로 부모가 호출이되고 자식의 프로퍼티가( override )가 아니기 때문에 부모의 초기화블록이 실행되면서 자식의 초기화되지 않는 init 블럭에 접근하지 않고 부모의 init에서 처리하기 때문에 300이 재대로 출력되는건가요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
처음 04:35초 메인패스트 부분부터 난관이네요..
MainFast에서 splashActivity 부분에 <intent-filter> 을 넣으니까 오류가 막 엄청뜨네요. 버전도 같은데 코드또한 약간 다릅니다. 강의에 안보이는 <activity 부분에 android:exported="ture" /> 도 저는 보입니다.. ERROR:C:\Users\i\AndroidStudioProjects\MySoloLife2\app\build\intermediates\packaged_manifests\debug\AndroidManifest.xml:25: AAPT: error: unexpected element <intent-filter> found in <manifest><application>. 라고 에러코드는 나와있습니다.
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
질문 있습니다.
코틀린에서는 null 사용을 안전하게 하기 위해서 null 이 들어갈 수 있는 변수를 완전히 다른 타입으로 간주하고 아래와 같이 효과적으로 관리할 수 있다. 라고 말씀해주셨는데요 그렇다면 String과 String? 타입은 엄연히 다른 타입 인것이고 String? 이 자체를 하나의 타입으로 간주해야하는건가요? String? 이렇게 생긴 타입은 코틀린에서는 클래스로 정의 되어 있지 않아서요..!
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
3. 클래스를 상속받을 때 주의할점 질문
그 Base 와 Derived를 설명 해 주실 때 1. 상위 클래스 생성자가 실행되는 동안 하위 클래스의 프로퍼티 즉 Derived를 인스턴스화 한다는 말은 2. Derived에 있는 number에 값을 집어 넣어준다는 건데 3. 이때 상위 클래스에서 넘버를 호출하게 되면 하위 클래스에 있는 넘버를 가져오잖아요 4. 근데 아직 상위 클래스의 constructor가 먼저 실행된 단계라서 하위 클래스에 number 라는 값에 초기화가 이루어지지 않아서 0 이 나오는 거에요. (3.)을 삽질을 조금 해가며 찾아봤었는데, 제가 이해했는게 맞는지 질문드립니다. "open 된 부모 클래스의 필드는 사용자가 지정한 값을 무시하고, 기본 값을 할당한다. 이후 자식 클래스에서 같은 이름의 필드를 만들어 사용한다. (쉐도잉)" 그래서 부모 클래스 Base init {..} 안에 open 필드를 사용하면 기본값이 나온다고 이해 했습니다. 제가 이해한 내용이 맞을까요? - - <장문 주의> - - 이런 결론을 내게된 과정은 아래와 같습니다. 자바로 디컴파일을 해보니, 코틀린은 생성자를 여러 개를 역할 나눠 순서대로 사용하더라구요. 1, (기본 값) (사용여부를 나타내는 이진수) (기본생성자 마커)각 매개변수에 넣을 기본 값을 지정. var 로 선언하더라도 동일 public Base() { this(0, 0, 0, 0, 0, 31, (DefaultConstructorMarker)null);} 2. (사용여부를 나타내는 이진수)를 바탕으로 초기화를 하는 생성자 예) 총 5개중에 첫번째, 세번째 변수 사용 => 10100 public Base(int var1, int var2, int var3, int var4, int var5, int var6, DefaultConstructorMarker var7) { // 매개 변수를 5개를 사용해서, 6번째에 사용여부 이진수를 넣음 if ((var6 & 1) != 0) { var1 = 100; } if ((var6 & 2) != 0) { var2 = -1; } if ((var6 & 4) != 0) { var3 = -11; } if ((var6 & 8) != 0) { var4 = -22; } if ((var6 & 16) != 0) { var5 = -33; } this(var1, var2, var3, var4, var5) 3. 일반적인 생성자 코드와 init {...} 안의 내용 public Base(int number, int base, int hoho, int hihi, int hehe) { this.number = number; this.base = base; this.hoho = hoho; this.hihi = hihi; this.hehe = hehe; String var6 = "Base Class " + this.base; System.out.println(var6); var6 = "B " + this.getNumber(); System.out.println(var6);} 즉 Base 부모 클래스에는 open 한 변수들은 바로 위에 적힌 (3. 생성자)를 통해 기본값이 할당된 상태로 그냥 존재하더라구요. public class Base { private final int number; // open 한 매개변수 private final int base; // open 한 매개변수 private final int hoho; private final int hihi; private final int hehe; 이후 Derived 자식 클래스에 의해 부모 클래스의 매개변수들이 가려졌었습니다. public final class Derived extends Base { private final int number; private final int derived; 자식 클래스의 초기화 여부와 상관없이 부모클래스 안에서, 부모 필드를 호출했으니 0이 나오게 되는 거더라구요. 이후 자식 객체에서 같은 이름으로 쉐도잉 되는데, 가려졌을 뿐 힙 메모리 상에는 부모클래스의 필드는 그대로 0 이구요. 제가 이해한 내용이 맞을까요? ---------------- 혹시 getter 로 접근하는 것과 필드에 직접 접근하는 거에 차이가 있는건가 싶어서, 그것도 확인해보았는데 - 내부에서만 사용하는 경우 getter로 접근하지 않고 직접 필드 접근으로 최적화 되었습니다. String var3 = "Derived Class " + this.derived;System.out.println(var3); - open 을 사용하거나 override된 필드는 getter로 접근하더라구요. var3 = "D " + this.getNumber();System.out.println(var3); 근데 최적화의 차이만 있을 뿐, this.number 로 변경되더라도 결과는 다르지 않을 듯 합니다. Base init{..} 은 어차피 부모 필드를 호출하게 되니까요.
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
강의를 듣고 응용해봤는데 질문있습니다
강의의 게시판 만들기 부분을 실습하고 나서 게시글 양식으로 만드셨던 board_list_item.xml을 이렇게 변경해봤습니다. 나머지 글들은 강의에서 하던대로 따라해서 불러와지는게 되는데 제가 추가한 저 초록색사진은 글을 작성할때 즉 강의 상의 코드인 BoardWriteActivity.kt에서 사진이 첨부되면 그 첨부된 사진이 저 초록색사진에 같이 업로드 되게끔 만들고 싶습니다. 저 사진의 id값은 preview입니다. <?xml version="1.0" encoding="utf-8"?><ScrollView 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" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".Sell"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar2" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="?attr/actionBarTheme" app:titleTextColor="@color/white" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="판매글 작성" android:textSize="23sp" android:textStyle="bold"/> </androidx.appcompat.widget.Toolbar> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <EditText android:id="@+id/et_newtitle" android:layout_width="330dp" android:layout_height="50dp" android:layout_marginLeft="20dp" android:layout_marginTop="70dp" android:gravity="center" android:maxLength="15" /> <EditText android:id="@+id/et_originalname" android:layout_width="330dp" android:layout_height="50dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:gravity="center" android:hint="※주의 : 책 제목 그대로 써주세요 ※" android:maxLength="100" /> <EditText android:id="@+id/et_price" android:layout_width="330dp" android:layout_height="50dp" android:hint="숫자 옆에 원을 붙여주세요" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:gravity="center" android:maxLength="10" /> <ImageView android:id="@+id/imageupload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/baseline_add_black_48dp" android:layout_marginTop="30dp" /> <EditText android:id="@+id/et_newdetail" android:layout_width="334dp" android:layout_height="260dp" android:layout_marginLeft="20dp" android:layout_marginTop="30dp" android:layout_marginBottom="10dp" android:background="@drawable/boxline" android:ems="10" android:gravity="top" android:hint="내용을 입력하세요." android:maxHeight="200dp" android:maxLength="200" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="96dp" android:layout_marginBottom="60dp" android:gravity="center" android:orientation="horizontal" android:paddingTop="30dp"> <Button android:id="@+id/upload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="50dp" android:text="올리기" /> <Button android:id="@+id/cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="취소" /> </LinearLayout> </LinearLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/newtitle" android:layout_width="35dp" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginTop="90dp" android:text="제목" android:textSize="16sp" /> <TextView android:id="@+id/newname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="12dp" android:layout_marginTop="160dp" android:text="상품명" android:textSize="15sp" /> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="235dp" android:text="판매가격" android:textSize="13sp" /> <TextView android:id="@+id/newpicture" android:layout_width="35dp" android:layout_height="17dp" android:layout_marginLeft="15dp" android:layout_marginTop="300dp" android:text="사진" android:textSize="16sp" /> <TextView android:id="@+id/newdetail" android:layout_width="35dp" android:layout_height="28dp" android:layout_marginLeft="15dp" android:layout_marginTop="370dp" android:text="내용" android:textSize="16sp" /> </FrameLayout> </FrameLayout></ScrollView> package com.example.joonggo2import android.content.Intentimport android.graphics.Bitmapimport android.graphics.drawable.BitmapDrawableimport android.net.Uriimport android.os.Bundleimport android.provider.MediaStoreimport android.util.Logimport android.widget.Buttonimport android.widget.Toastimport androidx.appcompat.app.AppCompatActivityimport com.bumptech.glide.Glideimport com.example.joonggo2.databinding.ActivityBoardInsideBindingimport com.example.joonggo2.databinding.ActivityMainBindingimport com.example.joonggo2.databinding.ActivityMifBindingimport com.example.joonggo2.databinding.ActivitySellBindingimport com.google.firebase.ktx.Firebaseimport com.google.firebase.storage.ktx.storageimport java.io.ByteArrayOutputStreamclass Sell : AppCompatActivity() { private lateinit var binding: ActivitySellBinding private val TAG = Sell::class.java.simpleName val storage = Firebase.storage private var isImageUpload = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySellBinding.inflate(layoutInflater) setContentView(binding.root) binding.upload.setOnClickListener{ val title = binding.etNewtitle.text.toString() val originalname = binding.etOriginalname.text.toString() val price = binding.etPrice.text.toString() val content = binding.etNewdetail.text.toString() val uid = FBAuth.getUid() val time = FBAuth.getTime() Log.d(TAG, title) Log.d(TAG, content) val key = FBRef.writein.push().key.toString() FBRef.writein .child(key) .setValue(BoardModel(title, originalname, price, content, uid, time)) Toast.makeText(this,"게시물이 업로드 되었습니다.", Toast.LENGTH_LONG).show() if(isImageUpload == true) { imageUpload(key) } val intent = Intent(this, AfterLoginmain::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) startActivity(intent) } binding.cancel.setOnClickListener { val intent = Intent(this, AfterLoginmain::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) startActivity(intent) } binding.imageupload.setOnClickListener { val gallery = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI) startActivityForResult(gallery, 100) isImageUpload = true } } private fun imageUpload(key : String) {// Get the data from an ImageView as bytes val storageRef = storage.reference val mountainsRef = storageRef.child(key + ".png") val imageView = binding.imageupload imageView.isDrawingCacheEnabled = true imageView.buildDrawingCache() val bitmap = (imageView.drawable as BitmapDrawable).bitmap val baos = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos) val data = baos.toByteArray() var uploadTask = mountainsRef.putBytes(data) uploadTask.addOnFailureListener { // Handle unsuccessful uploads }.addOnSuccessListener { taskSnapshot -> // taskSnapshot.metadata contains file metadata such as size, content-type, etc. // ... } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(resultCode == RESULT_OK && requestCode == 100) { binding.imageupload.setImageURI(data?.data) } }} 위 사진두개는 강의에서 하신 BoardWriteActivity.kt와 역할이 같은 xml과 kt파일입니다. 지금 이 코드에서 글과 갤러리에서 사진을 첨부하는 기능은 모두 구현되어있습니다. 그런데 사진도 메인화면에 뜨게끔 하려니 너무 막막해서 질문드립니다...
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
게시판 만들기에서 게시글 ListView만들기 에서 발생한 문제 질문드립니다.
강의를 보며 개발자님과 똑같이 하지 않고 저에게 필요한 부분들을 제 스타일대로 바꾸면서 듣고 있습니다. 잘 되다 이번에 문제가 생겼습니다. 현재 레이아웃이 겹칩니다.. 어느 부분의 코드를 보여드리야할까요.. 추가적으로 어떤 걸 말씀드려야하는지 알려주시면 더 자세하게 질문하겠습니다. 도와주세요
-
미해결윤재성의 Kotlin 기반 안드로이드 앱 개발 Part4 - 실전 프로젝트
그대로 작성했는데.. 스플래시화면에 로고가 안보입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. setTheme(R.style.Theme_MapService) 입력 전에는 MainActivity 테마에 로고가 잘 나오는걸 확인했는데요.. setTheme(R.style.Theme_MapService) 입력 후 확인해보면 splash.xml에서 설정한 android:src="@drawable/soft_logo"없이 android:drawable="@color/white"만 보이는데요 무슨문제일까요...
-
미해결1:1채팅 만들기(Android + Kotlin + Firebase)
개복님 말씀대루 다했는데 도중에 앱이 꺼져용
- 개복님 수업 잘듣고 있습니다. 이번에 최신버전 설치해서 말씀하신거 따라 하구 있는데 , 오류가 뜨는건 아닌데 앱을 구동시키니 팅겨버리네요. ㅠ 로그캣에서 에러난 곳을 살펴보니 auth=firebase.auth 여기서 오류가 난거 같습니다. 말씀하신거 중에서는 apply plugin: 'com.google.gms.google-services' 한개 못했는데, 최신버전에는 plugin { id' '} 이렇게 되있는 곳에 ' com.google.gms.google-services ' 집어넣으려고 하니 오류가 떠서 못집어넣었어요. 제가 잘못생각하는 건가용 .. 개복님이 보기에 한심해보이겠지만 ㅠㅠ 도와주세용 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결1:1채팅 만들기(Android + Kotlin + Firebase)
안녕하세요. 말씀하신 import 추가했는데 오류가 또 뜨네요 ㅠ
- 버전은 4.0.1입니다 . 처음에는 최신버전으로 하다가 바꿔서 4.12 로 했구. 방금 4.0.1로 했는데 똑같이 뜨네요 ㅠ 인프런 질문 검색해보니 다른분도 똑같이 질문했던데 답변이 안달렸더라구여. 밑에 사진은 그분거 입니다. 선생님 강의 들으면서 공부하고 있었는데 여기서 막히네요 ㅠ
-
미해결1:1채팅 만들기(Android + Kotlin + Firebase)
안녕하세욤 강의 잘보고 있습니다
- 붙여 넣기 하는 와중에 auth 마지막 부분이 오류가 발생해요. 어떻게 할수 있을까요?? 강의 잘보고 있습니다. 꾸벅 는 1:1 문의하기를 이용해주세요.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
이미지 이름 오류
drawable 폴더에 splash 이미지 파일이 있는데 왜 이미지뷰에서 스플래쉬이미지가 적용이 안될까요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
파이어베이스 익명로그인 강의 09:01 부분 문의
해당 부분 에서 FirebaseAuth, Firebase는 자동으로 import가 되는데 Firebase.auth 부분에서 뒤에 auth가 자동 import가 뜨질 않고 Unresolved reference:auth 에러가 계속 발생합니다. 한 번만 확인해주시면 감사하겠습니다. // LoginActivity package com.fitdback.userinterface import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.Toast import com.fitdback.pointdetection.R import com.google.firebase.auth.FirebaseAuth import com.google.firebase.ktx.Firebase class LoginTestActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login_test) // Initialize Firebase Auth auth = Firebase.auth val btnAnonymousLogin = findViewById<Button>(R.id.btnAnonymousLogin) btnAnonymousLogin.setOnClickListener { auth.signInAnonymously() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d("LoginTestActivity", "signInAnonymously:success") val user = auth.currentUser // updateUI(user) } else { // If sign in fails, display a message to the user. Log.w("LoginTesetActivity", "signInAnonymously:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT ).show() // updateUI(null) } } } } } // build.gradle(app) apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'com.google.gms.google-services' android { compileSdkVersion buildConfig.compileSdk defaultConfig { applicationId 'com.fitdback.userinterface' minSdkVersion buildConfig.minSdk targetSdkVersion buildConfig.targetSdk versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static' cppFlags "-std=c++11","-frtti", "-fexceptions" } } ndk { abiFilters 'armeabi-v7a' } } // externalNativeBuild { // cmake { // path "CMakeLists.txt" // } // } lintOptions { abortOnError false } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } aaptOptions { noCompress "tflite" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } sourceSets { main { jniLibs.srcDirs = ['libs'] } } } repositories { maven { url 'https://google.bintray.com/tensorflow' } flatDir { dirs 'libs' } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation project(':openCVLibrary341') implementation deps.kotlin.stdlib.jdk // implementation(name:'tensorflow-lite', ext:'aar') implementation deps.android.support.appcompatV7 implementation deps.android.support.constraintLayout implementation deps.android.support.design implementation deps.android.support.annotations implementation deps.android.support.supportV13 implementation deps.timber implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly' implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly' // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:29.2.1') // Declare the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth-ktx' testImplementation deps.junit androidTestImplementation(deps.android.test.espresso, { exclude group: 'com.android.support', module: 'support-annotations' }) }
-
미해결스프링 핵심 원리 - 고급편
lambda 사용관련하여 질문이 있습니다
강의 매우 잘 듣고 있습니다. 전략패턴 강의를 듣다가 V1 ... V4로 리팩토링 하는 과정에서 람다를 사용하신 것을 보았습니다. 저는 강의를 들으면서 코틀린으로 실습을 진행하고 있는데 ContextV1 context1 = new ContextV1(() -> log.info("비즈니스 로직1 실행")); 코틀린 언어를 사용하는 경우 위와 같이 람다를 사용할 수 없게 됩니다. 물론 저의 코틀린 실력이 부족한 탓이지만 간단한 이슈 때문에 신경쓰여서 다음 강의로 넘어가지 못하고 있습니다 ㅠㅠ 코틀린언어 사용시 위와같은 코드에서 람다를 어떻게 써야하는지 궁금합니다.
-
미해결윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming
41강 AutoCompleteTextView강의 영상 중 onItemClick 이벤트 관련 질문입니다.
안녕하세요. 41강 영상 13분 부분을 직접 실습해 보면 abcd, abca, abcb, abcc, bbaa, bcab, bdab <--data1 오토컴플리트텍스트뷰 창에 a를 입력했을 때 자동완성으로 뜬 것을 클릭하면 textView2 창에 제대로 된 데이타가 뜹니다. 하지만 b를 입력했을 때 자동완성으로 뜬 것을 클릭하면 엉뚱한 것이 뜹니다. 아마도 b를 입력한 상태에서 뜨는자동완성 리스트 중 첫번째인 bbaa를 포지션 0 값으로 넘겨주기 때문에 발생하는 문제 같습니다. 그렇기 때문에 단순히 data1[position]을 하게 되면 원래 data1의 첫번째인 abcd가 화면에 나오게 되네요. (여기서는 bbaa가 떠야되는데 말입니다) 아마도 OnItemClickListener 인터페이스를 구현하는 과정에서 onItemClick 메서드에 position 값으로 넘어오는 값의 문제 같은데, 이를 해결하는 방법이 없을까요?
-
해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스 사진 여러장 업로드 방법 좀 알려주세요.
당근마켓 같이 상품 올릴때 사진올리잖아요. 그런형태를 원합니다. 그래서 리사이클러뷰 형태로 아이템에 사진이 나오게는 했습니다. private fun imageUpload(key: String) {} saveBtn.setOnClickListener {imageUpload(key) finish()} 강의에서는 1개만 업로드 하셨는데 사진 여러장을 업로드는 어떻게 하나요? 구글링, 유튜브 찾아봤는데 여러장 올리는건 드물고 자바형식에..... 도저히 안되서 질문 드려요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프로젝트에서 lombok 사용
[질문 내용]안녕하세요. 저는 코틀린으로 코드를 짜며 수업을 듣고 있습니다. kotlin에서는 빌드 순서때문에 lombok을 적용하기 까다롭다고 알고 있는데, 실무에서 코틀린 프로젝트를 하실 때 lombok적용여부와 만약 lombok을 사용하신다면 적용방법이 궁금합니다! 항상 좋은 강의 감사합니다.