はじめに Retrofit と Kotlin Coroutine Adapter を使ってHTTP通信を行うAndroidアプリを開発しているのですが、Coroutineのキャンセル後にHTTP通信の例外が発生すると、思いがけず例外が未キャッチになる → アプリがクラッシュする、という挙動があり、ハマったので、問題の内容と解決方法をシェアします。 問題の説明 コード例 例えば、Retrofitで次のようにHTTP API呼び出しを定義し interface GitHubService { @GET("users/{user}/repos") fun listRepos(@Path("user") user: String): Deferred<List<Repo>> } class MyViewModel : ViewModel() { private val viewModelJob =
Kotlin 1.3 からStableになるといわれているKotlin Coroutinesを勉強したのでメモとして書いておきます。 Kotlin Coroutinesって何??って方は下の記事を読めばだいたい理解できるかと思います。自分もこの記事を読んで学びました。 http://sys1yagi.hatenablog.com/entry/2018/08/28/000620 準備 まずはセットアップからしていきます。 前提として - Retrofitは導入してある - コンバータはMoshiを使うので導入してある app/build.gradle に書きを追加します。 kotlin { experimental { coroutines "enable" } } implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:0
前提 Retrofit + RxJavaを使ったAPI通信時に、デフォルトではHTTP 200番台以外のステータスコードはエラーとして onError(throwable) に渡ってくる。 その場合は retrofit2.HttpException 型になっているため、onError 内で if (throwable instanceof HttpException) すれば個別にハンドリング可能であるが、これが使いやすいかどうかは議論の余地があるように思う。 個人的には、リカバリ不能なエラー(たとえばサーバダウンやネットワーク不達)以外は onNext で受け取りたい。 1 理由は2つあって、 onErrorにくるとそのObservableは終了するので RxBinding + REST の組み合わせのようなObservableと相性が良くない。 エラー理由をJSONで返すAPIは、でき
実用的なライブラリをKotlin交えて紹介しようプロジェクト4 今回はAPIコールを簡単に書くことができるRetrofit2を紹介します。 ちなみに今回はJsonを自動的にクラスへ変換してくれるライブラリとしてGsonを利用します。 また、今回の実装例はこちらにPRを作っているので、よろしければ参考にどうぞ https://github.com/HoNKoT/KotlinAndroidDatabindingSample/pull/3 Retrofit2 "A type-safe HTTP client for Android and Java" と公式サイトに謳われているとおり、簡単にAPIコールするためのライブラリです。 また、バックグラウンドで行なってコールバックを指定することも簡単にできます。 公式サイト 使い方 使い方は至ってシンプル gradle interface実装 Http
All slide content and descriptions are owned by their creators.
What Is Retrofit? Retrofit is a type-safe HTTP client for Android and Java. Retrofit makes it easy to connect to a REST web service by translating the API into Java interfaces. In this tutorial, I'll show you how to use one of most popular and often-recommended HTTP libraries available for Android. This powerful library makes it easy to consume JSON or XML data which is then parsed into Plain Old
I want to fetch XML data from API and map it to Kotlin model object by using Retrofit2 + SimpleXML in Kotlin. However, I got such as the following error message from SimpleXML. org.simpleframework.xml.core.MethodException: Annotation @org.simpleframework.xml.Element(data=false, name=, required=true, type=void) must mark a set or get method This is fetched XML data <?xml version="1.0" encoding="UTF
前提 いま参加しているプロジェクトのネットワーク通信部分を大幅に書き換える必要があり、次のような理由からRxJavaの採用を検討した。 複数のAPI呼び出しを並行でやったり待ち合わせて逐次処理したり使い分ける必要がある 複雑な一連の呼び出しをリトライやエラーハンドリングを考慮して書くことが簡単にできそう 各社の採用実績から思いとどまる理由がない 筆者はRxJava(1)を業務で使ったことがある RxJavaで書き直した結果これらの要求を非常に簡単に満たすことができたが、不慣れなメンバーには「いつ非同期処理が開始されたのか分かりにくい」ことが判明した。 本ドキュメントは元々社内Qiita Teamに書き始めたものであるが、世の中の同じようなチームにも益があるかも知れないと考え公開することにした。 なお、現在RxJavaはバージョン2なのでとくに断りなくRxJava2(2017年6月時点の最新
まえがき KotlinでAndrid開発は控えめにいって、 最高 です。 AndroidでAPIを叩く時には、OkHttp + Retrofit + RxJavaが定番になっていると思います。 Koltinの力を持ってすれば、RxJavaを使わず、Coroutinesを使うことで、幸せな開発が待っているかもしれません。 注意:Kotlin 1.1.xでは、Coroutinesは、experimental機能です。実験的な機能ですので、リリースされるまでは、プロダクトにいれないほうが無難です RxJava版とCoroutines版の比較 もっとシンプルな具体例のほうがよかったけど、すいません。MVP構成での具体例になりました。。。 RxJava版 interface GithubApi { @GET("users/{user}") fun user(@Path("user") user: S
class Response{ @SerializedName("val") val val<Val>? = null } っていうモデルだとうまくいかない。形式が異なるのでエラーになる。 そこでJsonDeserializerを使う。 以下のようにjsonMappingのタイミングでリマップする。 class ValRequestDeserializer:JsonDeserializer<Response>{ override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): Response { // ここでjsonが配列かオブジェクトか判定して配列にリマップする return context!!.deserialize(json, Response::c
It’s been more than two years since I wrote this post about MVVM, RxJava and Retrofit. It seems a bit old-fashioned to me right now. It’s surprising how much you can learn in one year! You take a look back and you might be embarrassed by your own code. Not only the code itself but also the process of how you get there. All that seems legacy code to me. In this article, I’m going to try to improve
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く