๋ชฉ๋กAndroid (92)
๐ฑ dreaming DiNO

2. data ์์ ๋ญ๋ญ ์๋์ง ํ์ธํ๋ ค๊ณ log๋ฅผ ์ฐ๊ธฐ์ ๋๋ฌด ๋ฒ๊ฑฐ๋ก์... ๊ทธ๋์ ํ ๊ฒ ๋ชจ๋ค? + ๋๋ฌ์ ๋ณ์๋ฅผ ๊ฒ์ํ๋ค. ex) auth.current.email ๊ทธ๋ฌ๋ฉด ์์ ๋ด๊ธด data ๋ฅผ ํ์ธ ํ ์ ์๋ค! WoW! 3. ๋๋ signOut() ํจ์ ์ดํ์ ์ ๋ง ์ ์ ์ ๋ณด๊ฐ ์ฌ๋ผ์ก๋์ง ํ์ธํ๊ธฐ ์ํด Debug๋ฅผ ์ฐ์ด ๋ดค๋ค. ๋ค ๋๊ณ ๋์ auth.currentUser.email ์ด ๊ณ์ ์ด ์์๋ค๊ฐ Null ๋ก ๋ณ๊ฒฝ๋์์์ ํ์ธ!

[๋ฌธ์ ๋ฐ์] ๋ก๊ทธ์ธํ ๊ตฌ๊ธ ๊ณ์ ์ด ์ฌ๋ฌ๊ฐ ๋จ๊ธด ํ๋๋ฐ, ์ ํํ๋ฉด ํ๋ฉด์ ํ์ด ์๋๊ณ ์๋ฌด ๋ฐ์์ด ์์์ [๋ฌธ์ ํด๊ฒฐ] SHA-1 ์ถ๊ฐ 1. SHA-1 ํ์ธํ๊ธฐ Terminal ์๋ ๋ช ๋ น์ด ์คํ ./gradlew signingReport ์๋์ ์ฌ์ง์ฒ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๋์จ๋ค๋ฉด ์ฑ๊ณต์ ๋๋ค. ์ฌ๊ธฐ์ ํ์ํ SHA-1์ ์ ๋ณด๋ฅผ Firebase๋ ๋ ๋ค๋ฅธ๊ณณ์์ ํ์๋กํ๋ ๊ณณ์์ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉํ์๋ฉด ๋๊ฒ ์ต๋๋ค. ./gradlew signingReport ๋ช ๋ น์ด ์คํํ ๋ชจ์ต 2. SHA1 ๋ณต์ฌ -> Firebase console ๋์งํธ ์ง๋ฌธ ์ถ๊ฐ

๋ชจ๋ฐ์ผ ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด์๋ ์ธ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํธ์ ์๋, ์คํ ๋ฆฌ์ง, API ๋ฑ ๋ชจ๋ ๊ฒ์ ๊ฐ๋ฐํด์ผ ํ๋ค. ํ์ง๋ง ๋ชจ๋ฐ์ผ ์๋ฒ๋ ์ด๋ฐ ๋ชจ๋ ๊ฒ์ ๊ตฌ์ฑํ๋๋ฐ ๊ตฌ์ฑํ๋ ๋ฒ์๊ฐ ๋งค๋ฒ ์๋ก์ด ์ฑ๋ค๊ณผ ์ฐจ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ์ค๋ฅผ ์ค์นํ๊ณ , FTP๋ฅผ ์ค์นํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํ๊ณ , ๋ ธ๋ ์๋ฒ๋ ์คํ๋ง ์๋ฒ๋ฅผ ์ฌ๋ฆฌ๊ณ , ๋ฐฉํ๋ฒฝ์ ์ฌ๋ฆฌ๊ณ , ๋๋ฉ์ธ์ ๊ตฌ์ ํ๋ ๋ฑ ๋ฐ๋ณต์ ์ธ ์์ ์ ์ฑ ๊ฐ๋ฐํ ๋๋ง๋ค ํ๋ ๊ฒ์ ์๊ฐ๋ญ๋น! FireBase๋ ์ด ๋ชจ๋ ํ๋ซํผ์ ํ๋ก์ ํธ ๊ตฌ์ถ ์ ์๋์ ์ผ๋ก ๋ง๋ค์ด ์ค๋ค. ๋ํ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์ ๋ฆฌ๋ ์ค ๋ช ๋ น์ด๋ฅผ ์ ํ์๋ ์์ผ๋ฉฐ ๋๋ฉ์ธ์ ๊ตฌ์ ํ ํ์๋ ์๊ณ ๊ฐ๋ฐํ๋ ๋์์๋ ์๋ฒ๋ฅผ ๊ตฌ์ ํ ํ์๋ ์๋ค! Firebase๋? Firebase๋ 14๋ ๋์ ๊ตฌ๊ธ์์ ์ธ์ํ ๋ชจ๋ฐ์ผ, ์น ์ ..

๐ฅบ ์๋ฌ ๋ฐ์ java.lang.RuntimeException: Exception while computing database live data. at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:92) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:764) Caused by: java.lang.NullPointerExc..

๐ก Fragment ์์ ๊ฐค๋ฌ๋ฆฌ ์ด๋ฏธ์ง ๋ค์ค ์ ํํ์ฌ Uri Data ์ป์ ํ์์ฑ : ๊ฐค๋ฌ๋ฆฌ๋ฅผ Intent๋ก 1. gradle ์ถ๊ฐ //EventBus implementation 'org.greenrobot:eventbus:3.2.0' 2. ๊ฐค๋ฌ๋ฆฌ ์ฌ์ง ์ ํ ๋์ฐ๊ธฐ // ์ฌ์ง ์ถ๊ฐ ๋ฒํผ binding.addPhotoBtn.setOnClickListener { // CropImage.activity() // .start(requireContext(), this) // ๊ฐค๋ฌ๋ฆฌ ๋ค์ค์ด๋ฏธ์ง ์ ํ ๋์ฐ๊ธฐ val intent = Intent(Intent.ACTION_PICK) intent.type = MediaStore.Images.Media.CONTENT_TYPE intent.putExtra(Intent.EXTR..

ํ ์ด๋ธ์ ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ ์ฌ์ง์ ์ ์ฅํ๊ธฐ ์ํด image column ์ด ์ถ๊ฐ๋ ํ์์ฑ ์๊น 1. Room์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก primitive type๊ณผ ๊ทธ wrapping ํ์ ๋ง ์ง์ ํ์ง๋ง ๋๋ image uri์ path๋ฅผ List๋ก ์ ์ฅ์ ํ๋ ค๊ณ ํ๋ค 2. Gson ์ด์ฉํ์ฌ TypeConverter ํด๋์ค ์์ฑ TypeConverter Room์ primitive type์ด ์๋ ๋ค๋ฅธ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ Room์์ ์ ๊ณตํ๋ TypeConverter ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. class Converters { @TypeConverter fun fromTimestamp(value: Long?): Date? { return value?.let { Date(it) } }..

์ ๊ฐ empty์ blank๊ฐ ๋งค์ผ ํท๊ฐ๋ ค์ ํ์คํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๋ ค๊ณ ํฉ๋๋ค. String Validation ํ์ธ ์ค, ์์ฃผ ์ฌ์ฉํ๋ Null, Empty, Blank์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค. ์๋์ ์ฝ๋๋ค์ group: org.apache.commons, name: commons-lang3, version: 3.11 ์ ๋๋ค. Null ๋ณ์์ ์๋ฌด๊ฒ๋ ํ ๋น๋์ง(์ฐธ์กฐํ์ง) ์์ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. Empty empty(๋น์ด์๋) : ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 0์์ ์๋ฏธํฉ๋๋ค. ์๋๋ StringUtils.isEmpty ์ฝ๋์ ๋๋ค. ๋์ฌ๊ฒจ ๋ณด์ค ์ ์ ""๊ณผ " "์ ์ฐจ์ด์ ๋๋ค. empty๋ length = 0์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ " "๊ฐ์ false๋ก ๋ฐํ ๋ฉ๋๋ค. StringUtils.isEmpty // Empty..
$ adb install 'app-release.apk' adb: failed to install app-release.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI] TestOnly ์ฑ์ผ๋ก ๋ง๋ค์ด์ง๋ฉด ์๋์ ๊ฐ์ด -t์ต์ ์ ์ฃผ์ด ์ค์น๋ฅผ ํด์ผ ํฉ๋๋ค. $ adb install -t 'app-release.apk' TestOnly ์ฑ์ผ๋ก ๋ง๋ค์ด์ง๋ฉด ํ๋ ์์ํฌ ๋ ๋ฒจ์์ ๊ถํ ์์ด ํน์ ๋ถ๋ถ์ ๋๋ฒ๊น ํ๋ ๋ฑ์ ๋์์ ๋ฐ์ ์ ์์ต๋๋ค. ๋์ ๋ฆด๋ฆฌ์ฆ ์ฑ์ผ๋ก ์ฐ์ผ ์ ์์ต๋๋ค. Android Studio๋ apk๋ฅผ ๋ง๋ค ๋ AndroidManifest.xml์์ testOnly ์์ฑ์ ๋ณด๊ณ TestOnly apk๋ฅผ ๋น๋ํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์๋์ฒ๋ผ true๋ก ์ค..
$ adb push app-debug.apk /data/local/tmp/com.beanandyu.myapplication com.android.ddmlib.AdbCommandRejectedException: device unauthorized. This adb server's $ADB_VENDOR_KEYS is not set Try 'adb kill-server' if that seems wrong. Otherwise check for a confirmation dialog on your device. Error while Installing APK ์์ ์๋ฌ๋ Android Device์์ USB Debugging์ ํ์ฉํ์ง ์์์ ๋์ ๋ฐ์. ํด๊ฒฐ๋ฐฉ๋ฒ์ Android device์ usb ์ฐ๊ฒฐ์ ๋บ..

Glide๋? ๊ตฌ๊ธ์์ ๊ณต๊ฐํ ์ด๋ฏธ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ ์ด๋ฏธ์ง ๋ก๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์๋ ค์ ธ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ง ๋ก๋ฉ๊ณผ ๋์์, gif ํ์ผ ๋ก๋ฉ๊น์ง ์ง์ํ๋ค. Gradle ์ถ๊ฐ gradle์ Glide ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ค๋ค. (https://github.com/bumptech/glide) build.gradle(Module:app) dependencies { implementation 'com.github.bumptech.glide:glide:4.10.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' } Glide ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ val imageView: ImageView = findViewById(R.id.imageView..