분류 전체보기84 ad.loadClass에서 발생하는 ClassNotFoundException 앱에서 해당 Exeption을 뿜으며 앱이 종료되는 현상이 갑자기 많이 발생하였습니다. 해당 Crash는 아래와 유사합니다. Fatal Exception: java.lang.NoClassDefFoundError Failed resolution of: Lorg/apache/http/ProtocolVersion; Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList------ 이용자들은 아마 영문도 모르고 앱이 종료되는 현상을 겪고 있을겁니다. Apache Http 라이브러리가 가 Android 6.0 부터 삭제되었음에도 불구하고, 다른 라이브러리가 이것을 자꾸 요청하기 때문에 발생하는 문제입니다. 제 경우에는 Apache http.. 2019. 4. 3. TextView 에서의 InflateException 발생 이번 업데이트에서 TextView에 fontFamily 속성 부여후 앱 배포를 했는데, android:fontFamily="sans-serif-light" 상기와 같이 xml에 직접적으로 폰트속성을 설정해준 곳에서는 발생하지 않고 android:theme="@style/textTheme" 와 같이 테마로 설정해준 곳에서만 발생하는데, 일부 기기에서 InflateException이 계속 발생하여 원인을 계속 찾았습니다. 그런데 이것이 해당되는 모든 레이아웃에서 발생하는것이 아니고, 일부 특정 레이아웃에서만 계속 발생하였기 때문에 원인이 무엇인지 알 수 가 없었습니다. 찾아보니, 해당이슈는 api 버전 26 이하의 기기에서 간헐적으로 발생하는 OS 자체의 버그이며, 안드로이드 O 버전 에서는 픽스되었다고 합.. 2019. 4. 2. 라이젠 PC 에서 Android Studio AVD 사용하기 인텔 기반 시스템을 사용하다가 라이젠 기반의 개발 머신으로 변경후에 당황했던 것이 빌드후 테스트를 할 때 AVD를 사용하려 하니 Emulator : emulator : ERROR : x86 emulation currently requires hardware acceleration! 과 같은 메시지를 뿜으면서 AVD가 실행되지 않는다는 것이었습니다. AVD 보다는 실제 기기로 테스트하는 편이 더 많아 신경쓰지 않고 있다가 Crash Report에 보고되는 버그가 발생하는 기기 버전 중 가지고 있지 않는 기기의 앱 버전이 있어서 실행하니 상기의 오류가 발생하며 AVD가 실행되지 않는 경우가 있어서 다시 찾아보게 되었습니다. 해결방법으로 찾은것들 중에 한가지는 AVD를 생성할때 x86 이미지 대신 amr64와.. 2019. 4. 2. SwipeRefreshLayout 을 사용할 때 가로 스크롤 과 충돌하지 않게하기 WebView와 같은 객체를 사용할때 주로 같이 사용하는 레이아웃이 SwipeRefreshLayout입니다. 모바일 크롬처럼 화면을 아래로 내리면 웹뷰가 새로 로딩되게 해주는 레이아웃 입니다. 이때 문제가 되는 것이, 웹뷰에 로딩중인 사이트에서 가로스크롤이 가능한 요소가 있을 경우에는 해당 요소를 가로 스크롤 할 때 SwipeRefreshLayout이 오작동 하거나 가로 스크롤 요소의 가로 스크롤이 불가능한 경우가 발생합니다. 아래와 같은 CustomSwipeRefreshLayout 을 사용해 주어야 오작동을 방지하고 가로 스크롤 요소와 SwipeRefreshLayout의 기능을 충돌하지 않게 사용할 수 있습니다. 아래와 같은 클래스를 만들어 주고, xml 레이아웃에서 정의 해주면 사용할 수 있습니다. .. 2019. 3. 17. 오늘이 양력/음력 공휴일인지 확인하는 코드 오늘이 공휴일인지 아닌지를 확인하여 특정 작업을 실행시켜 주어야 할 때가 있습니다. 일반적인 공휴일의 경우에는 날짜 리스트를 만들어 두고 오늘의 날짜가 해당 리스트에 있을 경우로 판단해주면 되지만 설날이나 추석 같은 음력 공휴일이 표시된 경우라면 제법 복잡하게 생각해야 되는것 같습니다. 안드로이드 API24 , N (누가) 버전 이상부터 추가된 ChineseCalendar 를 이용하면 간단하게 확인할 수 있습니다. * ChineseCalendar 의 내용과 자세한 사용법은 안드로이드 개발자 문서의 ChineseCalendar항목을 확인 해 주세요. @RequiresApi(api = Build.VERSION_CODES.N) public boolean checkHoliday(Date date) { boole.. 2019. 3. 17. ScrollView 사용시 스크롤 중인지 판단하여 작업 제한하기 스크롤 뷰를 사용할 때 스크롤 상태를 확인해야 할 경우가 있습니다. 스크롤 뷰 내에 클릭 리스너가 있는 객체가 있을 경우 스크롤 할때 해당 객체가 클릭되는 경우가 발생하기 때문입니다. 이때, 스크롤 중인지 아닌지를 확인하여, 스크롤 중이라면 클릭을 제한해야 스크롤 중에 클릭되더라도 객체의 클릭리스너나 터치 리스너가 작동하지 않습니다. 돌아다니는 많은 예제를 보면 CustomScrollView를 만들어 내부에서 OnScrollStoppedListener를 구현하는 방법이나 getViewTreeObserver()를 통해 OnScrollChangedListener를 달아서 내부에서 Y 스크롤의 포지션값 비교를 통한 방법이 있는데 전자의 경우는 사용자가 스크롤뷰에서 fling 제스쳐를 주는 등 예상치 못한 이벤.. 2019. 3. 17. soundpool 사용 시 매너모드/무음모드 연동 soundpool은 안드로이드에서 간단한 소리를 재생할 때 유용하게 사용할 수 있는 방법입니다. 기본적인 사용방법은 1. onstart에서 load Soundpool soundPool @Override public void onStart() { super.onStart(); soundPool = new SoundPool(4, AudioManager.SRTEAM_SYSTEM, 100); soundsMap = new HashMap(); soundsMap.put(1, soundPool.load(getActivity(), R.raw.sound1, 1)); } onStart에서 load해 주어야 soundpool을 사용할 수 있습니다. 이후에는 시스템리소스에서 상주하며 soundPool.play 로 언제든지 재생.. 2018. 5. 5. 특정 작업시 화면이 꺼지지 않게 유지 public void KeepScreenOn(Integer stateKeepScreen) { if (stateKeepScreen == 0) { getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else if (stateKeepScreen ==1) { getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } } 특정작업을 수행할 때 화면이 꺼지지 않도록 하는 방법. 사용시에는 KeepScreenOn(1); , KeepScreenOn(0); 으로 사용합니다. Flag와 clearFlag로 만들었습니다. 상기.. 2018. 4. 26. 알림바(Notification Bar)를 누를 때 프레그먼트 실행 하기 보통, 앱에서 사용하는 알림바(Notification Bar)를 눌렀을 때는 액티비티로 이동하게 됩니다.하지만, 프레그먼트를 사용할 때는, 프레그먼트로 이동하게 해 주어야 좀 더 다양한 작업들을 할 수 있습니다. 프레그먼트의 경우 단독으로 사용하기 보다는 여러개의 프레그먼트를 묶어서 뷰페이저를 통해서 사용하게 됩니다. 노티피케이션에서 프레그먼트를 실행하는 방법은 아래와 같은 과정을 통해서 동작하게 됩니다. 1. 알림바(Notification Bar)를 사용하여 알림.2. 알림바를 누르면 메인액티비티를 실행.3. 메인액티비티에서 노티피케이션에서 실행된 것을 확인하면 뷰페이저의 특정 프레그먼트로 이동.3. 프레그먼트로 이동 이후, 원하는 작업을 수행. 1. Notification 알림 띄우기 public s.. 2018. 4. 10. 뷰페이저 사용 시 특정 프레그먼트로 이동하기 뷰페이저를 사용할 때 프레그먼트에서 작업 후에 특정 프레그먼트로 바로 이동하는 방법은 아래와 같다. 메인 액티비티에 아래와 같은 메소드를 구현해 준 뒤 프레그먼트에서 호출해 준다. static ViewPager viewPager; public static void MoveFragment() { viewPager.setCurrentItem(2);} 2018. 4. 10. 이전 1 ··· 5 6 7 8 9 다음