Android
[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
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์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ์ ์ฅ
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
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
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..