안드로이드 <Kotlin> 17

[android/java] firesbase SDK java.util.long cannot be cast to class java.lang.integer 문제 해결

개요 이 글은 안드로이드 firebase SDK 사용하여 데이터베이스 I/O를 할때, firebase 데이터를 자바 Integer에 저장 시도하는 경우 에 한해 올바른 해결 방안을 안내합니다. int count = data.get("count"); 해결 방법 안드로이드에서 데이터베이스 I/O에 사용되는 모든 숫자 변수는 long을 사용해 주세요. 또한 long으로 캐스팅해주세요. long count = (long) data.get("count"); 이유 firebase 데이터베이스의 숫자는 모두 Long 자료형으로 받습니다. 따라서 캐스팅 가능한 long으로 캐스팅해주어야 합니다. 참고 자료 https://firebase.google.com/docs/database/android/read-and-writ..

[android/java] recyclerview onClickListener에서 fragment transaction 및 startActivity 구현하기

가정 custom recyclerView를 이미 구현했다고 가정합니다. 아래와 같이 생성자 내부에 onClick 리스너가 작성된 상태에서 시작합니다. public class TestAdapter extends RecyclerView.Adapter { ... public static class ViewHolder extends RecyclerView.ViewHolder { ... private AppCompatActivity activity; public ViewHolder(View view) { super(view); ... view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); Fr..

[android/java] 메소드 오버라이딩 시 super 메소드 호출의 필요성

개요 안드로이드 프로그래밍할때, 우리는 굉장히 많은 메소드를 오버라이딩합니다. 그런데 오버라이딩 시 super 문법을 통해 부모 클래스의 메소드를 호출하는 것 super.onSaveInstanceState(outState); 을 매우 자주 보았을 겁니다. 왜 사용할까요? 메소드 오버라이딩은 일반적으로 부모 클래스 메소드를 사용하지 않고 재정의한 메소드를 사용하기 위함인데, 굳이 부모 클래스의 메소드를 호출하면 오버라이딩한 의미가 별로 없지 않나요? @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); ... } super 먼저 이 상황을 이해하기 위해선 super 문법..

[android] BottomNavigationView 아이템 클릭 시 shift mode 애니메이션 비활성화하기

문제 BottomNavigationView의 아이템 선택 시 아이콘과 라벨이 동시에 커지는 애니메이션이 기본값으로 설정되어 있습니다. 이 애니메이션 효과(Shift mode)를 제거해 보겠습니다. 해결 방법 이 문제를 해결하기 위해 빌드 시 강제로 dimens.xml에 지정된 값(12sp)을 오버라이드하도록 만들어야 합니다. res/drawable/values/dimens.xml 에 아래 코드를 추가해 주세요. 12sp 바텀네비게이션 레아아웃에 아래 코드를 추가해 주세요. xmlns:tools="http://schemas.android.com/tools" tools:override="true" 애니메이션 효과가 사라졌습니다. 참고 자료 해당 이슈에서 해결 방법을 찾았습니다. Google Issue Tra..

[android/메모] 안드로이드 개발 시 필요한 참고 자료 모음

개인적으로 자주 열람하는 자료입니다. 소스 코드 공식 Google Issue Tracker issuetracker.google.com Kotlin 스타일 가이드 | Android Developers Kotlin 스타일 가이드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 문서에서는 Kotlin 프로그래밍 언어의 소스 코드와 관련된 Google의 Android 코딩 표준을 developer.android.com Google Java Style Guide 1 Introduction This document serves as the complete definition of Google's coding standards for source code in the Java™ Pr..

[android] intent ACTION_OPEN_DOCUMENT 사용 시 EXTRA_INITIAL_URI 활용하여 특정 디렉토리 열기

개요 안드로이드 버전마다 저장소 위치가 상이할 수 있습니다. 저는 안드로이드 13, S21 (SM-G991N)에서 구동하였습니다. 참고해 주세요. EXTRA_INITIAL_URI 을 활용하여 파일 관리자가 특정 디렉토리를 열도록 만들어 보겠습니다. 주의 사항 intent에 인코딩된 Uri을 전달해 주어야 합니다. Uri에서 path 단은 반드시 인코딩(예: / -> %2F)된 문자열로 구성되어 있어야 합니다. // BAD Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary:Pictures/"); // GOOD Uri uri = Uri.parse("content://com.android.externalst..

[android] firebase com.google.android.gms.common.api.ApiException: 10: 에러 해결

개요 안드로이드에서 파이어베이스 기능 구현 시 발생할 수 있는 문제입니다. 다양한 상황에서 발생할 수 있으므로 다른 글들 또한 확인하세요. com.google.android.gms.common.api.ApiException: 10: 올바른 "웹" 클라이언트 ID 확인 안드로이드 프로젝트임에도 Oauth 웹 클라이언트 ID 를 사용해야 합니다. 저의 경우 android Oauth 클라이언트 ID를 사용하고 있었습니다. 해당 프로젝트의 자동 생성되는 웹앱 Oauth 클라이언트 ID를 사용해야 합니다.. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getSt..

[android] Could not find method kapt() for arguments 에러 해결 (Room 사용 시)

개요 Room은 안드로이드에서 SQLite를 손쉽게 사용하게 만드는 미들웨어입니다. Room을 가이드에 따라 진행 시 다음과 같은 에러를 접할 수 있습니다. Could not find method kapt() for arguments 해결 방법 kapt를 모두 annotationProcessor으로 바꾸어 주세요. 바꾸기 전 def room_version = "2.5.0" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // To use Kotlin annotation processing tool (kapt) kapt "androidx...

[android] xmlns android, app 이해

개요 액티비티 구현 시 루트 레이아웃에 다음과 같이 선언되어있음을 확인할 수 있습니다. xmlns xmls는 xml 네임스페이스를 정의합니다. 한 xml에서 다른 외부 xml에 정의된 변수를 활용하기 위해 사용합니다. xml 네임스페이스는 두 개 이상의 xml을 구별하여 충돌을 방지하는 변수명입니다. xml 네임스페이스 정의 필요성 안드로이드에서 showAsAction 은 android와 app모두 정의되어 있을 수 있습니다. android:showAsAction app:showAsAction 이때, 어떠한 showAsAction을 사용할 것인지에 대해 명확한 정의가 필요합니다. 굳이 android 가 아니어도 상관없습니다. androidCutsomNamespace 이런식으로 정의해도 됩니다. 말 그대로..

[Gradle] unexpected element <property> found in <manifest><application> 문제 해결하기

문제 상황 플러터 앱 빌드 과정에서 아래와 같은 에러가 발생했습니다. manifest.xml 파일을 잘못 작성한 경우에도 발생할 수도 있지만 해당 에러는 잘 작성했음에도 발생할 수 있습니다. unexpected element found in 해결 방법 android gradle plugin과 gradle의 호환성 문제 또는 gradle이 이를 갱신하지 않아 발생할 수 있는 문제입니다. android gradle plugin과 gradle의 상호 호환되는 버전을 확인하고 호환되는 버전으로 바꾸어줍니다. 이 글에서 저는 상호 호환되는 android gradle plugin 4.2.0버전과 gradle 6.7.1버전으로 맞추어 주겠습니다. 1. 프로젝트/android/build.gradle 수정 buildsc..