Android

    [Android/Kotlin] Coroutines

    [Android/Kotlin] Coroutines

    ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜„์žฌ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์“ฐ๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์‹คํ–‰์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ๋ฐฑ ์ง€์˜ฅ ๋ฐ Blocking ์ƒํƒœ๋กœ ์ด์–ด์ง„๋‹ค. ์ฝ”๋ฃจํ‹ด์€ ์„ฑ๋Šฅ ์ข‹๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์‹œ์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์€ function A์™€ function B๋ฅผ ๊ต์ฐจํ•˜๋ฉด์„œ ์‹คํ–‰ํ•˜๋ฉด์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋ฃจํ‹ด๊ณผ ์“ฐ๋ ˆ๋“œ ๋ชจ๋‘ ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ์ง€์›ํ•˜์ง€๋งŒ ์ฝ”๋ฃจํ‹ด์€ ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ž‘ํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ฝ”๋ฃจํ‹ด์€ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ฐ€๊น๋‹ค. ์ฝ”๋ฃจํ‹ด์€ ๋‘๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ๋‹ค. stackless stackful ์ฝ”ํ‹€๋ฆฐ์€ stackless ์ฝ”๋ฃจํ‹ด์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ์“ฐ๋ ˆ๋“œ์— ๋งคํ•‘๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ์„ธ์„œ์—์„œ ์ปจํ…..

    [Android] Manifest merger failed

    Error Log Manifest merger failed with multiple errors, see logs Merged Manifest Manifest merger failed : Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory)..

    [Android] Jetpack Compose

    [Android] Jetpack Compose

    Jetpack Compose๋Š” ์„ ์–ธํ˜• UI ๋„๊ตฌ ํ‚คํŠธ์ด๋‹ค. ํ”„๋ŸฐํŠธ์—”๋“œ ๋ทฐ๋ฅผ ๋ช…๋ นํ˜•์œผ๋กœ ๋ณ€ํ˜•ํ•˜์ง€ ์•Š๊ณ ๋„ ์•ฑ UI๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์„ ์–ธํ˜• API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 1. ๋ช…๋ นํ˜• vs ์„ ์–ธํ˜• ๊ธฐ์กด ๋ช…๋ นํ˜• ์ ‘๊ทผ ๋ฐฉ์‹ ์œ„์ ฏ์„ ์ธ์Šคํ„ด์Šคํ™”ํ•จ์œผ๋กœ์จ UI๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. (๋ณดํ†ต XML ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ์„ inflate ํ•˜์—ฌ ์ด ์ž‘์—…์„ ํ•œ๋‹ค) ๊ฐ ์œ„์ ฏ์€ ์ž์ฒด state ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์œ„์ ฏ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” getter ๋ฐ setter ๋ฉ”์„œ๋“œ๋ฅผ ๋…ธ์ถœํ•œ๋‹ค. Compose์˜ ์„ ์–ธํ˜• ์ ‘๊ทผ ๋ฐฉ์‹ ์œ„์ ฏ์€ ๋ณดํ†ต Stateless ์ƒํƒœ์ด๋ฉฐ setter ๋˜๋Š” getter ํ•จ์ˆ˜๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. ์œ„์ ฏ์€ ๊ฐ์ฒด๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ™์€ Composable ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ์ธ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜์—ฌ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.(์ด๋ ‡๊ฒŒ ํ•˜๋ฉด MVVM๊ณผ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜ ..

    [Android/Kotlin] Kotlin extension

    ์•ˆ๋“œ๋กœ์ด๋“œ 4.1๋กœ ๋ฒ„์ „์—…ํ•˜๋ฉด์„œ Kotlin extension plugin์ด ์‚ญ์ œ๋˜์–ด ์ถ”๊ฐ€ ํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค plugins { 'kotlin-android-extensions' } ...viewBingding์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค(https://1000sj.tistory.com/175)

    [Android/Kotlin] Room์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ ์ €์žฅ

    [Android/Kotlin] Room์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ ์ €์žฅ

    1. dependency ์ถ”๊ฐ€ implementation 'androidx.room:room-runtime:2.3.0' implementation 'androidx.room:room-compiler:2.3.0' 2. ๊ตฌ์กฐ database entities dao 1. Database @Database๋กœ ์ฃผ์„์ด ๋œ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผํ•œ๋‹ค RoomDatabase๋ฅผ ํ™•์žฅํ•˜๋Š” ์ถ”์ƒํด๋ž˜์Šค์—ฌ์•ผ ํ•œ๋‹ค. ์ฃผ์„ ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ํ•ญ๋ชฉ์˜ ๋ชฉ๋ก์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. ์ธ์ˆ˜๊ฐ€ 0๊ฐœ์ด๋ฉฐ @Dao๋กœ ์ฃผ์„์ด ์ง€์ •๋œ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•ด์•ผํ•œ๋‹ค. // database : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™€๋”๋ฅผ ํฌํ•จํ•˜์—ฌ ์•ฑ์˜ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์•ก์„ธ์Šค ํฌ์ธํŠธ ์—ญํ•  // entities(Class[]) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํฌํ•จ..

    [Android/Firebase] Firebase CRUD

    Create final String uniqueKey = dbRef.push().getKey(); databaseReference.child(tablename).child(uniqueKey).setValue(data) Read ValueEventListener postListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // ๊ทผ๋ณธ // Post post = dataSnapshot.getValue(Post.class); // ํ•˜์œ„ ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ for (DataSnapshot dataSnapshot: snapshot.getChildren()) { val data = dataSn..

    [Android/Firebase] Firebase Upload pdf

    UploadPdfActivity.java package com.sjcoding.admincollegeapp; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.cardview.widget.CardView; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android..

    [Android/Firebase] Firebase Database, Storage

    [Android/Firebase] Firebase Database, Storage

    Demo 0. Firebase ์™€ Android studio ์—ฐ๋™ 1. Database ์ƒ์„ฑ firebase console ์—์„œ create database ๋ฅผ test ๋ฒ„์ „์œผ๋กœ Create ํ•ด์ค€๋‹ค. storage, database rules๋ฅผ ์ฒดํฌํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ read, write ์ œ์•ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค. 2. Dependencty ์ถ”๊ฐ€ android studio tools >> firebase >> database, storage ๋ฅผ addํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค. implementation 'com.google.firebase:firebase-database:20.0.0' implementation 'com.google.firebase:firebase-storage:20.0.0' 3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์“ฐ๊ธฐ..

    [Android/Java] ๊ฐค๋Ÿฌ๋ฆฌ ์—ด๊ณ  ๊ทธ๋ฆฌ๊ธฐ MediaStore, bitmap

    [Android/Java] ๊ฐค๋Ÿฌ๋ฆฌ ์—ด๊ณ  ๊ทธ๋ฆฌ๊ธฐ MediaStore, bitmap

    Demo ๊ตฌ์„ฑ permission activity layout - [AndroidMaifest.xml] - [UploadNotice.java] package com.sjcoding.admincollegeapp; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.ImageView; import androidx.annotation.Nullable; import..