applan의 개발 이야기
[오류해결] Android BitmapFactory 오류 본문
사용 프레임워크 : 모피어스
💥 발생
프로젝트 기능 변경 테스트 진행 중 발생.
HTML canvas를 이용해 이미지를 생성 후 안드로이드 다른 앱으로 간단한 데이터 보내기 기능을 이용하려는데...
기존 URL Image 로 가져오던 소스가 Base64 로 인코딩 되어있는 URL 를 읽지 못해 좀더 뒤에 있는 소스까지 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference 에러를 발생시키며 앱을 튕기게 만듬.
🧑💻 문제 확인
java.net.MalformedURLException: unknown protocol: data 에러는 사실상 canvas에서 canvas.toDataURL(); 를 사용하여 데이터를 가져오면 Base64 형태로 URL을 전달해주기 때문에 굳이 net을 이용할 필요가 없다고 판단함,
android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream) on a null object reference 에러 메시지가 중요하다고 판단
에러 내용을 해석을 해보면 Null 에서 Bitmap.compress를 참조하고있다는 에러 메시지로 보여졌다.
🤔 문제 해결 과정
Null 에서 Bitmap.compress를 참조하고있다는 말은 즉 Bitmap 객체가 Null 일 것이라고 생각했다.
그래서 바로 AndroidStudio의 디버깅 모드 이용
그럼 dataURL(Base64) 방식으로 넘겨온 정보를 어떻게 이미지화 시켜서 휴대폰에 저장 후 공유하기 기능을 사용할 수 있을까 검색을 진행해보았다. 순수 안드로이드 스튜디오 방식 코딩이 아닌 모피어스 프레임워크를 통한 방식이기 때문에 검색에 어려움이 있었다.
그래서 안드로이드 자체에서 처리하는 방식을 먼저 검색해볼필요가 있었고 해당 질문을 찾게되었다.
이 질문에서 처리하는 방법 중
byte[] decodedString = Base64.decode("Your Base64 String", Base64.DEFAULT);
Bitmap bitMap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
해당 소스가 굉장히 눈에 띄었으며 요 방식대로 도전해보고자 소스를 수정하였지만... 동일하게 null 에러가 발생하였고 좀더 검색을 진행해보았다. 그러는 중...
😃 문제 해결
String encodedString = "data:image/jpg;base64, ....";
String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",")
substring 을 이용해 "data:image/jpg;base64"를 제거해야한다는 것을 확인하게 되었다.
진행하고있던 소스를 수정 후 테스트해보니
정상 동작 확인!!!!
🎓 배운점
- dataUrl -> Bitmap 캐스팅에는 dataUrl의 타입 선언부를 잘라주어야 인식한다.
- 디버깅 모드는 짱이다. 👍👍👍
🧗 공부해볼것
1. Bitmap, BitmapFactory Class 공부
2. dataUrl 자세히 공부
- Bitmap, BitmapFactory Class 공부
- Bitmap 개념
- Bitmap, BitmapFactory 사용 예시 및 사용처 ( 간략하게 )
- dataUrl 자세히 공부
- dataUrl 개념
- dataUrl 사용 예시 및 사용처 ( 간략하게 )
👣 흔적
'개발 > Dev.' 카테고리의 다른 글
[오류해결] An error occurred on the server. (1) | 2022.09.13 |
---|---|
[오류해결] getter, setter 어노테이션 인식 문제 (0) | 2022.09.04 |
[오류해결] HTML canvas 안 나오는 문제 ( width 사용 ) (0) | 2022.08.22 |
[오류해결] TS2349: This expression is not callable 에러 (0) | 2022.08.22 |
[오류해결] 터미널 PSSecurityException 에러 (0) | 2022.08.16 |