본문 바로가기

분류 전체보기83

Iterator ::: java.util.ConcurrentModificationException 1. List에서 특정 조건을 가진항목을 삭제하던 중 발생하였습니다 List mList = new ArrayList(); public void deleteItem(String Title) { for(int i=0; i 2020. 6. 28.
MaterialComponents ::::: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant). 1. 발생 조건 : Material Object인 Chip을 처음 사용 해 보던 중 발생하였습니다. 아래의 해당 Exception이 발생하며 Crash로 앱이 종료됩니다. Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant). at com.google.android.material.internal.ThemeEnforcement.e(ThemeEnforcement.java:248) at com.google.android.material.internal.ThemeEnforcement.c(ThemeEnf.. 2020. 6. 27.
IllegalArgumentException: Bound must be positive 1. 아래와 같이 Random을 이용해서 난수를 생성 하던 중 발생하였습니다. List 사이즈 중에서 랜덤한 포지션을 뽑아내는 함수입니다. Random mRandom = new Random(System.currentTimeMillis()); int RandomNum = mRandom.nextInt(mList.size()); 2. Exception의 내용은 간단합니다. random함수의 범위는 양수여야 한다는 내용입니다. List의 사이즈가 0일때가 있어서 0이 들어갈때 해당 Exception이 발생하게 됩니다. 3. 아래와 같이 mList의 사이즈가 0이상인지 를 판단하는 조건문을 넣어줌으로서 해결하였습니다. Random mRandom = new Random(System.currentTimeMillis(.. 2020. 6. 13.
Android Error Building Signed APK: keystore.jks not found for signing config 'externalOverride' release를 위해 서명한 뒤 빌드하려 할 때 해당 Exception이 발생하는 경우가 있습니다. Android Studio의 상단메뉴 Build>Generate Signed Bundle/APK...를 눌러서 키스토어 경로를 열어보면 위의 해당 Error가 발생합니다. 즉, 본 Exception은 릴리즈 서명용 인증서 위치가 이동되어서 발생하는 오류 메시지 입니다. 인증서 위치를 수정해주시면 제대로 빌드됩니다. 2020. 6. 10.
java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare() 1. Log로 실행 유무를 확인하다가 Toast로 바로 확인해야 할 부분이 생겨서 Log를 Toast로 변경하였다가 발생하였습니다. 아무생각 없이 넣다보면 가끔 생기게됩니다. JobIntentService를 처음 다루다가 발생하게 되었습니다. Service니까 당연히 Background로 돌아가게 되는부분인데 생각없이 하다보니 오랜만에 해당 Exception을 확인하게 되었습니다. 2. 원인은 명확합니다. 해당 Exception의 세부적인 부분을 보면 아래와 같습니다. java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$4.done(AsyncTask.java:399) at .. 2020. 6. 5.
java.lang.RuntimeException: Unable to instantiate service --------Service> is not accessible from java.lang.Class<android.app.AppComponentFactory> 1. 브로드 캐스트 리시버를 통해서 실행되는 JobIntentService를 구현한 뒤, 테스트 해보니 JobIntentService가 실행될 때 Exception이 발생하며 앱이 종료되는 현상을 확인했습니다. 2. 여기저기 확인해 보니 대략적인 이유는 아래와 같습니다. 2.1 Service class에 public이 선언되지 않음 2.2 Service class에 default constructor를 만들어주지 않음 개발자 문서에 있는 JobIntentService의 예제를 참고하여 구현했는데 약간의 차이가 있는것 같습니다. 컨스트럭터가 없으면 문제가 발생하는것 같습니다. 3. 2번의 원인을 아래와 같이 해결 해 주니 발생하지 않았습니다. public class SomeThihgService exten.. 2020. 6. 5.
proguard-rules 작성 시 <Unresolved class name Error> lint 며칠전 안드로이드 스튜디오가 4.0 배포를 시작했습니다. 꽤나 예전에 안드로이드 스튜디오 최신버전 업데이트 이후에 몇몇 문제로 고생한적이 있어서 바로 안드로이드 스튜디오 업데이트는 잘 하지 않는데 어쩌다보니 업데이트를 해버리게 되었네요. 4.0 업데이트 이후 proguaproguard-rules 에서 위와 같은 오류가 발생하는 경우가 있습니다. 빌드가 안되는것인 아닌데 lint표시가 영 거슬리네요. 빨간줄 이 표시되는 가장 최상단의 룰 위에서 Alt+ Enter로 Suppress for statement 를 선언해주도록 합니다. 아래부분이 선언되며 lint 표시가 제거되게 됩니다. #noinspection ShrinkerUnresolvedReference Reference : Unresolved clas.. 2020. 6. 3.
EditText에 숫자만 입력할 때 최대/최소값 설정하기 우선 EditText에 숫자만 입력되도록 레이아웃 xml의 EditText에 다음속성을 선언합니다. ** android:inputType="number" 아래와 같은 class를 만들어 줍니다. package com.test; import android.text.InputFilter; import android.text.Spanned; public class InputFilterMinMax implements InputFilter { private int min, max; public InputFilterMinMax(int min, int max) { this.min = min; this.max = max; } public InputFilterMinMax(String min, String max) { t.. 2020. 6. 3.
CheckBox, switch 등을 ReadOnly처럼 사용하기 CheckBox나 Switch등은 클릭 이벤트가 발생하면 체크가 되거나 스위치가 온오프되는 편리한 기능을 가지고 있습니다. 보통은 아래와 같이 사용합니다. mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { mCheckBox.setChecked(isChecked); @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { //TODO check true } else { //TODO check false } } }); 별다른 처리를 하지 않더라도 편리하게 사용할 수 있는 이 기능은, .. 2020. 6. 2.
기기의 지역(Locale) 판별 및 리소스 사용하기, 국가코드와 언어코드 1. 개별적인 리소스 사용하기 2. 기기의 지역(Locale) 판별하기 3. 국가코드(contry)와 언어코드(Language) 1. 개별적인 리소스 사용하기 앱을 개발할 때, 사용자의 지역에 따라 다른 언어를 사용해야 하는 경우가 있습니다. 언어의 경우 보통 다음과 같이 개별적인 resource를 만들어 주면 됩니다. 해당 언어를 사용하는 기기에서 해당 resource를 사용하게 되며, 기기의 설정에서 언어변경시에도 자동으로 변경되게 됩니다. 만드는 방법은 아래와 같습니다. 개발중인 안드로이드 앱의 폴더 내의 app/src/main/res 폴더 내에 values를 언어별로 분리해서 추가 해 주면 됩니다. 뒤에 언어가 붙지 않은 폴더가 기본 폴더가 되며, 언어에 따라 해당 언어 코드가 붙은 폴더내의 리소.. 2020. 5. 28.