๋ชฉ๋กAndroid (92)
๐ฑ dreaming DiNO
https://stackoverflow.com/questions/60910978/how-to-return-value-from-async-coroutine-scope-such-as-viewmodelscope-to-your-ui How to return value from async coroutine scope such as ViewModelScope to your UI? I'm trying to retrieve a single entry from the Database and successfully getting the value back in my View Model with the help of viewModelScope, but I want this value to be returned back to..
์ฝ๋ฃจํด ์ฝ๋ฃจํด(Coroutines) ์ ์ฐ๋ ๋(Thread)์ ๊ธฐ๋ฅ์ ์ผ๋ก๋ ๋น์ทํ์ง๋ง, ํ๋์ ์ฐ๋ ๋ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ์ฝ๋ฃจํด์ด ์คํ๋๋ ๊ฐ๋ ์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ถ์ฅ๋๋ ๋์ ์คํ ์ค๊ณ ํจํด์ ๋๋ค. ์ฝ๋ฃจํด์ ๋จ์ผ ์ฐ๋ ๋ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ์ฝ๋ฃจํด์ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ง์ ์์ ๋์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ฅ์ ์ด ์์ต๋๋ค. ์ด์ ๋, ๊ธฐ์กด ์ฐ๋ ๋๋ Context-Switching(CPU๊ฐ ์ฐ๋ ๋๋ฅผ ์ ์ ํ๋ฉด์ ์คํ, ์ข ๋ฃ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ)์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์์ ์ฐ๋ ๋๋ฅผ ๊ฐ๊ธฐ๊ฐ ์ด๋ ต์ง๋ง ๋ฐ๋ฉด์ ์ฝ๋ฃจํด์ ์ฐ๋ ๋๊ฐ ์๋ ๋ฃจํด์ ์ผ์ ์ค๋จ(suspend) ํ๋ ๋ฐฉ์์ด๋ผ Context-Switching์ ๋น์ฉ์ด ๋ค์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ, ์ง์ ๋ ์์ ๋ฒ์ ๋ด์์ ์คํ์ด ๋..
์๋๋ก์๋์์ ์ด๋ฏธ์ง๋ทฐ์ ์ด๋ฏธ์ง๋ฅผ Setting ํ ๋, ์ฃผ๋ก ๋ค์์ ํจ์๋ค์ ์ฌ์ฉํ๋ค. setImageDrawable(...), setImageResource(...), setImageBitmap(...) ๊ทธ๋ผ ์๋์ ์ฝ๋์ฒ๋ผ ์ด๋ฏธ์ง๋ทฐ์ ๊ณ์ํด์ ์๋ก์ด ์ด๋ฏธ์ง๊ฐ ํ ๋น๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? while(true){ Bitmap newBitmap = BitmapFactory.decodeStream(...); imageView.setImageBitmap(newBitmap ); } ์ ์ฝ๋์์ imageView๋ ๊ณ์ํด์ ์๋ก์ด newBitmap์ ํ ๋นํ๊ณ ๊ธฐ์กด์ bitmap์ leak์ ๋ฐ์์ํฌ ๊ฒ์ด๋ค. ๊ฒฐ๊ตญ์๋ outofmemory exception์ด ๋ฐ์ํ ๊ฒ์ด๋ค. ์์ ์ฝ๋๋ ์๋์ ๊ฐ์ด ์์ ํ๋ฉด leak์..
1. ๋ฐ์ดํฐ ํด๋์ค ์ ์ํ์ฌ ๋ฆฌ์คํธ ์์ ๋ด์ -> ๋ฆฌ์คํธ ํ์ธ data class User(val id: Int, val value: Int) val user1 = User(1, 133) val user2 = User(2, 6456) val user3 = User(3, 554) val user4 = User(4, 234) val user5 = User(1, 854) val people = arrayListOf() people.add(user1) people.add(user2) people.add(user3) people.add(user4) people.add(user5) System.out.println(people) // [User(id=1, value=133), User(id=2, value=645..
์๋๋ก์ด๋ Q ์ดํ, ์๋๋ฐ์ค ๊ตฌ์กฐ์ ์ธ๋ถ ์ ์ฅ์์์ ํ์ผ์ ์ฝ์ด ๋ณด์ ์๋๋ก์ด๋ Q์ Scoped Storage TODO:: ํ๋ก์ ํธ์ ํฌํจ๋ ํ ์คํธ ํ์ผ์, ์ธ๋ถ ์ ์ฅ์ com.app.a ๋ก ๋ณต์ฌํ์ฌ, ํ์ํ ๋๋ง๋ค ์ฑ์ ์ธ๋ถ ์ ์ฅ์์ ์ ๊ทผํ์ฌ ๋ด์ฉ์ ์ฝ์ด ์ฌ ๊ฒ! 1. ํ๋ก์ ํธ ๋ด, assets/datasets/aaa.txt 2. ์ธ๋ถ ์ ์ฅ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ // TODO:: ์ ์ฅ์ ํ ์คํธ VCDebugLog.d(logTag, "isReadable: ${isExternalStorageReadable()}") // true VCDebugLog.d(logTag, "isWritable: ${isExternalStorageWritable()}") // true testCopy() // Check..
Gradle signingReport ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ธ์ฆ์์ SHA-1์ ๊ฐ์ ธ์ฌ ์๋ ์๋ค. ./gradlew signingReport ์๋ช ๋ณด๊ณ ์์๋ ๊ฐ ์ฑ์ ๋ณํ์ ๊ดํ ์๋ช ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. > Task :app:signingReport Variant: debug Config: debug Store: ~/.android/debug.keystore Alias: AndroidDebugKey MD5: A5:88:41:04:8D:06:71:6D:FE:33:76:87:AC:AD:19:23 SHA1: A7:89:E5:05:C8:17:A1:22:EA:90:6E:A6:EA:A3:D4:8B:3A:30:AB:18 SHA-256: 05:A2:2C:35:EE:F2:51:23:72:4D:72:67:A5:6C:8..
์ฐธ๊ณ ๊ธ : https://beeyoo0o0ncha.tistory.com/30 ์๋๋ก์ด๋ ๋ด๋ถ์ ์ฅ์ ์ธ๋ถ์ ์ฅ์ ์ดํดํ๊ฒ ์ ๋ฆฌ ์๋๋ก์ด๋์์ ์ฑ์ ์ ์ฅ์๊ฐ 2๊ฐ์ง๊ฐ์๋ค. ๋ด๋ถ ์ ์ฅ์(Internal Storage) , ์ธ๋ถ ์ ์ฅ์(External Storage) ๋ด๋ถ์ ์ฅ์ ํด๋น ์ฑ์ private ๊ณต๊ฐ์ด๋ฉฐ ๋ค๋ฅธ์ฑ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค ๋ ธ์ถ๋๋ฉด ์๋๋ ์ฑ์ beeyoo0o0ncha.tistory.com https://brunch.co.kr/@huewu/8#comment [2021-06-04 ์ ๋ฐ์ดํธ] ์ด์ ์ ์๋๋ก์ด๋ 11์ ๋ํด ๊ณต๋ถํ๋ ๋ด์ฉ ์ค ์๋๋ก์ด๋ 10์์ ๋์จ ๊ฑฐ์ง๋ง 11์์๋ ์ธ๊ธ๋ ๋ฒ์ ์ง์ ์ ์ฅ์(Scoped Storage)์ ๊ด๋ จ ์ฌํญ๋ค์ ๋ํด ์ ๋ฆฌํด๋ณด๋ คํฉ๋๋ค. ใ ใ ๊ทธ๋ฆผ๊ณผ ํจ๊ป ๊ฐ๋จํ๊ฒ ..
https://velog.io/@jaeyunn_15/Android-SDK-Version-%EC%84%A4%EC%A0%95%EC%9D%84-%EC%99%9C-%EA%B7%B8-%EB%B2%84%EC%A0%84%EC%9C%BC%EB%A1%9C-%ED%95%A0%EA%B9%8C
private var pattern: Pattern = Patterns.EMAIL_ADDRESS if (inputEmail.isNotEmpty() && inputPw.isNotEmpty()) { if (!pattern.matcher(inputEmail).matches()) { Toast.makeText(context, "์ด๋ฉ์ผ ํ์์ด ๋ง์ง ์์ต๋๋ค.", Toast.LENGTH_SHORT).show() return } ... } ์ ๊ณต ํจํด Patterns.EMAIL_ADDRESS Patterns.PHONE Patterns.WEB_URL Patterns.IP_ADDRESS
WebView ์น ํ์๊ณผ ์น ๋ธ๋ผ์ฐ์ ๋ Android, iOS, PC ๋ชจ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋๋ค. WebView๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ตฌ์ฑํ๋ HTML๊ณผ ๊ฐ์ ์์๋ค์ ๋ฐ์๋ค์ฌ ์ด๋ฅผ ๋ธ๋ผ์ฐ์ ์ ๋์ผํ ํ์์ผ๋ก ํด์ํด์ ํํํด์ฃผ๋ ๋ทฐ์ ๋๋ค. ๊ทธ๋์ WebView๋ PC์ ์๋ฒ์์ response ํ ์น ํ์ผ์ ๋ฐ์์ Android์์๋ ๋๊ฐ์ด ๋ณด์ฌ์ฃผ๊ณ ๋ค๋ฃฐ ์ ์๊ณ , ๋๋ฐ์ด์ค ์๊ด์์ด ์ ๋ณด ๊ณต์ ๊ฐ ๊ฐ๋ฅํ ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋์์ค๋๋ค. URL ์น ํ์ด์ง ์์ฒญ ๋จ์ํ WebView๋ฅผ ์ฐธ์กฐํ๊ณ loadUrl๋ก ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํํ์ฌ ํด๋น url์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. loadUrl ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ํด๋น ์ฃผ์์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต๋ฐ์ html ํ์ผ์ ์ฌ์ฉํ์ฌ ์น ํ๋ฉด์ ํ์ํฉ๋๋ค. WebView์ ..