목록분류 전체보기 (163)
Simple&Natural
어떤 분이 API를 이용해 데이터를 긁어오시는데 문자열이 ♥ 와 같은 식으로 나온다고 고민하셨다. 찾아보니 해당 형식은 HTML에서 Escaping을 위해 사용되는 문자열로 웹브라우저가 아닌 곳에서 응답을 받으면 해당 문자열이 그대로 출력되는 것이다. 그냥 HTML 문서에 출력되는 모습으로 바꾼 뒤 보여주면 되는 부분이다. 다행히 안드로이드 스튜디오의 text API 에서 Html 클래스를 제공하고 있어서 이를 이용하면 Escaping 된 HTML 문자를 읽어낼 수 있다. 소스코드를 아래에 적어둔다. class RetrofitUnitTest { companion object { const val BASE_URL = "http://sch.afreecatv.com/" } inline fun testCreat..
문제는 이러했다. A테이블과 B테이블이 있는데 Room에서 지원하는 Relation 방식으로는 Column 비교 시 대소문자 구분이 안되는 상황. 결국 쌩쿼리를 짜서 뽑아 써야 했다. 다음과 같이 LEFT JOIN을 이용하여 기준이 되는 테이블 A를 모두 포함하도록 하고 해당하는 Symbol 데이터를 붙여주는 방식. @Query("SELECT tickers.*, ticker_symbols.* FROM tickers LEFT JOIN ticker_symbols ON tickers.base_symbol = ticker_symbols.symbol COLLATE NOCASE") fun getAllTickerWithSymbols(): List [TickerSymbol] @Entity(tableName = "tic..
그동안 만든 기능을 테스트하기 위해 매번 앱을 빌드하고 그 결과를 로그에 찍어 보는 방법을 이용했다. 간단한 변수나 함수 하나의 결과값을 보기 위해 전체 앱을 빌드하고 확인하는 건 너무 비효율적이지 않을까? 하는 의문에서 개선방법을 찾기 시작했다. 해당 변수나 함수를 갖고 있는 클래스만 빌드해서 확인해 볼 수는 없을까? 하는 생각이 들었다. 내 소스코드를 돌아보니 클래스끼리 강하게 결합되어 있었기 때문에 하나의 클래스를 실행하기 위해 여기저기 다른 클래스까지 신경써야 하는 문제가 발생했다. 뿐만 아니라 하나의 클래스에서 여러가지 기능이 조잡하게 섞여 있어서 도통 이게 뭐하는 클래스지 하며 정체성의 혼란(?) 을 느끼기 시작했다. 어떤 기능을 테스트하고 싶은데 이게 어느 클래스에 있었는지 찾기가 어려웠던 ..
newParameterizedType으로 원하는 타입을 Parameter로 포함하는 Type을 만든다. 해당 메소드는 다음과 같이 구현되어 있다. /** * Returns a new parameterized type, applying {@code typeArguments} to {@code rawType}. Use this * method if {@code rawType} is not enclosed in another type. */ public static ParameterizedType newParameterizedType(Type rawType, Type... typeArguments) { if (typeArguments.length == 0) { throw new IllegalArgumentEx..