Programming(177)
-
CLEARTEXT communication to [TARGET_ADDRESS] not permitted by network security policy
HTTP 통신 라이브러리를 Volley에서 Retrofit2로 변경한 뒤, targetSDKVersion값을 28로 변경하자 잘 되던 HTTP 통신이 동작하지 않는다. 이상하다싶어서 브레이크 포인트를 걸고 확인해보니 onResponse도 아닌 onFailure에 걸렸는데, CLEARTEXT communication to [TARGET_ADDRESS] not permitted by network security policy에러가 뜨고 있었다. 다른게 아니라 Android 9.0부터는 기본적으로 HTTP로 접속하는 것을 막기 때문이라고 한다. (참고: Protecting users with TLS by default in Android P 물론 서버에서 HTTPS로 설정할 수 있다면 만사 OK지만, 나의 경..
2019.11.08 -
Retrofit2를 이용해서 서버로부터 Content-type이 image/jpeg로 이미지를 받아 Bitmap 객체로 처리하기
API를 호출했을 때 Content-type이 image/jpeg로 설정되는 경우, 응답에 JPEG파일이 실려오게 된다. 크롬의 개발자 도구에서 네트워크 탭을 통해 응답을 확인해보면, 실제로 이미지 파일이 응답 본문(Response Body)에 실려오는 것을 볼 수 있다. 그렇다면 Android에서 Retrofit2를 이용하여, 이러한 Bitmap을 처리하려면 어떻게 해야할까? 우선은 아래와 같이 interface를 작성해준다. 파일 용량이 적을 경우에는 @Streaming을 생략해도 잘 동작한다. Call에 넘겨주는 ResponseBody는 okhttp3패키지의 ResponseBody이다. JAVA를 사용하여 작성한 코드 public interface DonwloadImage { @GET("images..
2019.11.05 -
Kotlin <-> Java 클래스를 서로 참조 못할 때(Can not find symbol)
gradle에 다음과 같은 설정을 빼먹으면, Java로 선언한 클래스가 빌드 타임에 Kotlin으로 생성한 클래스를 참조하지 못한다. 빌드하기 전 IDE상에서는 잘 참조하고 있는 것처럼 표시하며, app의 build.gradle에서 선언해줬다 하더라도 하위 모듈에서는 해당 플러그인을 적용하도록 다시 선언해줘야 한다. 일반적으로 프로젝트 생성 시점에 언어를 Kotlin으로 선택하면 자동으로 적용되는 항목이기에 몰라도 크게 문제가 될 상황은 없지만, 레거시 코드를 부분적으로 참조한다거나 리펙토링할 때 헤멜 수 있는 문제이다. apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'
2019.11.03 -
어플리케이션의 HTTP 라이브러리를 Volley에서 Retrofit2로 교체한 후기 #1
Volley에서 Retrofit2로 HTTP 라이브러리의 변경을 결정하기까지. 2019년 11월부터 targetSDKVersion이 28 미만인 앱은 업데이트가 불가능하도록 정책이 변경됐다. targetSDKVersion이 28로 변경되면, Apache의 HTTPClient 지원이 중단된다. 여기까지는 별 생각이 없었는데, 실제로 targetSDKVersion을 28로 변경해보니 뭔가 이상하다. Volley를 사용하여 HTTP 통신을 하는 코드들이 오작동하기 시작한다. Android 5.1에서 HttpClient가 Deprecated되면서, HTTPClient에 의존하는 Volley도 사실상 Deprecated됐기 때문이다. 이에 대한 내용은 Android 통신 라이브러리의 역사를 되돌아본다, Pluu ..
2019.10.24 -
[ES6] for ... of
모던 자바스크립트 개발을 위한 ES6 이 포스팅은 인프런의 '모던 자바스크립트 개발을 위한 ES6 강좌'의 수강 내용을 바탕으로 정리한 내용입니다. for ... of for ... in 루프는 객체의 모든 열거가능한 속성에 대해 반복문을 수행하게 된다. 즉 Array의 prototype이나, 모든 객체의 원형이 되는 Object의 prototype에 추가한 값, 그리고 배열에 추가된 속성까지 탐색하게 된다. 반면 for ... of 구문은 컬렉션의 요소들에 대해서만 반복하게 된다. let data = [1, 2, undefined, NaN, null, ""]; Object.prototype.hello = "Hello"; Array.prototype.func = function(){}; d..
2019.10.20 -
[ES6] String에 추가된 메소드들
모던 자바스크립트 개발을 위한 ES6 이 포스팅은 인프런의 '모던 자바스크립트 개발을 위한 ES6 강좌'의 수강 내용을 바탕으로 정리한 내용입니다. String에 추가된 문자열들 startsWith, endsWith startsWith는 문자열이 어떤 문자열로 시작되는지 boolean형으로 반환해주는 메서드이다. 반대로 endsWith는 문자열이 어떤 문자열로 끝나는지 boolean형으로 반환해주는 함수이다. 두 메서드 모두 옵션으로 두 번째 파라메터인 startPosition, endPosition을 받는다. 다음은 ECMAScript2015에 명세된 startsWith의 내용이다. 21.1.3.21 String.prototype.startsWith ( searchString [ , po..
2019.10.20