본문 바로가기

Android68

webview의 loadData 사용 시 화면에 아무것도 나타나지 않을때 위와 같이 Open Source Licence 화면을 만들때 webview와 webview.loadData를 사용하곤 합니다. 보통 String 리소스에 해당 부분의 내용을 작성해 둔 후 아래와 같이 사용하면 화면의 webview에 간단하게 내용을 보여줄 수 있습니다. public void initWebview() { setContentView(R.layout.activity_setting_web); WebView webview = findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.setVerticalScrollBarEnabled(true); String HTML= getString(R.string.O.. 2020. 7. 20.
Color hex 코드를 R, G, B 값으로 분리하기 안드로이드의 색상은 hex코드로 사용합니다. 흰색의 경우 #ffffff, 검은색의 경우 #00000 와 같습니다. setColor등으로 해당 컬러를 view 요소에 적용하게 되는데, 그냥은 적용하지 못하고 int값으로 변환 후 사용합니다. 아래와 같습니다. String colorHex ="#ffffff" public void setColor() { int color = Color.parseColor(colorHex); textView.setColor(color); } 이때 컬러코드의 값을 R, G, B로 분리해야 할 경우가 있습니다. 이때는 아래와 같이 사용하면 됩니다. String colorHex = "#ffffff" public void colorToRGB() { int color = Color.pa.. 2020. 7. 18.
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.