지금까지 onError 이벤트를 통해 예외 처리를 하였다. 하지만 try-catch 문을 사용하여 예외 처리를 할 수 있습니다. 아래는 try-catch문을 사용한 예외 처리 코드입니다. 입력 class ExceptionHandling { fun cannotCatch() { val source = Observable.create{ emitter: ObservableEmitter -> emitter.onNext("1") emitter.onError(Exception("Some Error")) emitter.onNext("3") emitter.onComplete() } try { source.subscribe { data -> Log.it(data) } } catch (e: Exception) { Log.i..
안드로이드에서 화면당 하나씩 가질 수 있는 메뉴를 의미합니다. XML 수정 먼저 activity_main의 xml을 아래와 같이 수정합니다. Option Menu 만들기 res > New > Android Resource File을 클릭합니다. Resource type을 Menu로 설정하고 생성을 합니다. Option Menu XML 수정 option menu의 xml을 아래와 같이 수정합니다. Activity에서 Option Menu 보이게 하기 위에 그대로 하고 실행을 하게 되면 화면에 아래와 같이 아무것도 없이 기본 화면만 보이게 됩니다. Option Menu를 보이게 하기 위해서는 아래 코드를 추가하면 됩니다. class MainActivity : AppCompatActivity() { overr..
레이아웃은 위젯의 위치를 잡아주는 역할을 합니다. 레이아웃이 다른 위젯이나 레이아웃의 child 또는 children 속성을 가지기도 합니다. Container Container는 한 개의 자식을 갖는 레이아웃 위젯입니다. Container의 생성자는 아래와 같습니다. Container({ Key key, this.alignment, this.padding, Color color, Decoration decoration, this.foregroundDecoration, double width, double height, BoxConstraints constraints, this.margin, this.transform, this.child, }) padding은 Container 내부의 공간을 의미하고 ..
RxJava의 코드에는 로그를 넣을 수 있는 공간이 없습니다. Observable로 시작하는 업스트림과 그것을 받아서 처리하는 다운스트림이 동일한 문장으로 이루어져 있기 때문입니다. 따라 가독성이 높지만 예외 코드를 넣는데 어려움이 있습니다. doOnNext, doOnComplete, doOnError Observable에서 어떤 데이터를 발행할 때는 onNext, 중간에 에러가 발생하면 onError, 모든 데이터를 발행하면 onComplete 이벤트가 발생합니다. 입력 class DoOnExample { fun basic() { val orgs = arrayOf("1", "2", "3") val source = Observable.fromArray(*orgs) source.doOnNext{ data ..
Do 세계의 날씨 정보를 제공하는 API 중 OpenWeatherMap이 있습니다. 무료로 제공되는 API이고 REST 방식으로 제공됩니다. RxJava를 사용하여 데이터를 가져올 것입니다. Api Key 받기 API Key 생성을 위해 OpenWeatherMap 홈페이지에 접속한 후 중간 위의 Sign UP을 눌러 회원 가입합니다. 회원 가입을 완료하면 API 메뉴를 누른 후, Cueent weather data에 있는 Subscribe를 누릅니다. Free에 있는 Get Api key and Start를 누른 후 맨 위 중간에 있는 Sign in을 누릅니다. API Keys를 누르면 Default에 API Key 하나가 생긴 것을 볼 수 있습니다. API 준비가 끝났으니 이제 간단한 REST API ..
RxJava 스케줄러의 핵심은 결국 제공되는 스케줄러의 종류를 선택한 후 subscribeOn과 observeOn 함수를 호출하는 것입니다. subscribeOn 함수는 Observable에서 구독자가 subscribe 함수를 호출했을 때 데이터 흐름을 발행하는 스레드를 지정하고, observeOn 함수는 처리된 결과를 구독자에게 전달하는 스레드를 지정합니다. 또한, subscribeOn 함수는 처음 지정한 스레드를 고정시키므로 다시 subsribeOn 함수를 호출해도 무시합니다. 하지만 observeOn 함수는 다릅니다. 위의 사진을 설명하면 아래와 같습니다. subscribeOn을 호출했을 때는 데이터를 발행하는 첫 줄이 파란색 줄에서 실행된다. 이후에는 observeOn 함수가 호출될 때까지 파란색..
RxJava의 스케줄러를 활용하면 비동기 프로그래밍 방식이 달라집니다. 리액티브 프로그래밍은 서버와 연동하는 비동기 프로그래밍을 작성할 대 큰 힘을 발휘합니다. 아래는 HTTP 기반의 네트워크 프로그램 예제입니다. 입력 import common.Log import okhttp3.* import java.io.IOException class HttpGetExample { private val client : OkHttpClient = OkHttpClient() private val URL_README = "https://raw.githubusercontent.com/Im-Tae/Blog_Example/master/RxJava/samples/README_TEST.md" fun run() { val reque..