前提 Retrofit + RxJavaを使ったAPI通信時に、デフォルトではHTTP 200番台以外のステータスコードはエラーとして onError(throwable) に渡ってくる。 その場合は retrofit2.HttpException 型になっているため、onError 内で if (throwable instanceof HttpException) すれば個別にハンドリング可能であるが、これが使いやすいかどうかは議論の余地があるように思う。 個人的には、リカバリ不能なエラー(たとえばサーバダウンやネットワーク不達)以外は onNext で受け取りたい。 1 理由は2つあって、 onErrorにくるとそのObservableは終了するので RxBinding + REST の組み合わせのようなObservableと相性が良くない。 エラー理由をJSONで返すAPIは、でき
はじめに Androidアプリを作る際、WebAPIの仕様は決まっているものの、実際動くものがまだないということはよくあると思います。そんな時にRetrofitMockを使ってWebAPIをモック化することで、スムーズにアプリ開発を行うことができ、またWebAPIが使えるようになった時もスムーズに移行することができます。 RetrofitMock https://github.com/square/retrofit/tree/master/retrofit-mock 今回は、Retrofit2 + RxJavaでWebAPIを利用するコードに、RetrofitMockを組み込みます。 環境 Kotlin Retrofit2 RxJava RetrofitMock Moshi セットアップ implementation 'com.squareup.retrofit2:retrofit:2.3
実用的なライブラリをKotlin交えて紹介しようプロジェクト4 今回はAPIコールを簡単に書くことができるRetrofit2を紹介します。 ちなみに今回はJsonを自動的にクラスへ変換してくれるライブラリとしてGsonを利用します。 また、今回の実装例はこちらにPRを作っているので、よろしければ参考にどうぞ https://github.com/HoNKoT/KotlinAndroidDatabindingSample/pull/3 "A type-safe HTTP client for Android and Java" と公式サイトに謳われているとおり、簡単にAPIコールするためのライブラリです。 また、バックグラウンドで行なってコールバックを指定することも簡単にできます。 公式サイト 使い方 使い方は至ってシンプル gradle interface実装 HttpClient実装 g
All slide content and descriptions are owned by their creators.
Kotlinで書いているアプリで、Retrofit2 + OkHttp3でRSSを取得したときのめも。最初、うまくパースされなくてKotlinの問題なのかRetrofitの書き方の問題なのかコンバータのSimpleの書き方の問題なのかわからなくてちょっとハマってしまいました。 取得する対象は、はてなブックマークのRSSです。 http://b.hatena.ne.jp/Rei19/favorite.rss 準備 dependencies { ... compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' compile ('com.squareup.retr
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
どうも!スマートフォンアプリチームの岩田です! IoTLT Advent Calendar 2016の15日目の記事です。 最近、社内に導入されているSlackの絵文字を追加することが小さな楽しみになっています。前回の記事で懸念していた健康診断は血圧が高めになりそうだということをこの場を借りてご報告させていただきます。 今回は少し業務から離れて、社内LT大会やIoTLTで発表した「Minecraft x IoT」の補足記事を書いていきます。 発表を見ていない方はSlideShareにて資料を共有していますので一読していただけると幸いです。 IoTを駆使してゲームの世界と現実の世界を組み合わせた新しいMinecraftの遊び方を紹介していきたいと思います。 使うもの さっそく新しい遊び方を実現するために必要なものたちを紹介します。 Minecraft PC版 Wio Node ボタン LED
I'm trying to get the exact JSON that is being sent in the request. Here is my code: OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor(){ @Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.e(String.format("\nrequest:\n%s\nheaders:\n%s", request.body().toString(), request.headers())); com
2018/11/29 追記 UTF-8 以外の文字コードで POST / PUT を行う方法を追記しました。 RxJava 2.x 用の CallAdapter を追記しました。 前書き 最近Retrofitを使うことがあったんですが、イントロダクションをちょろっと読んだぐらいだと「え、そーなの?」と思うような事象に何度も見舞われたので、メモしておきます。 API の設定 HTTP メソッドやパス、クエリやパラメータなどを適当に作ったインターフェースとアノテーションで表現します。 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } ベースとなる URL はRetrofit.Builder#baseUrlで渡すの
サーバのモックが必要 リスト表示でデータが取って来れなかったとき, 正しくEmptyViewが表示されるかのテストを書くことになりました. そこで,Daggerとretrofitを使って,サーバのレスポンスをテストコードから, 操作できるようにしました.こんな感じです. @Test public void testEmptyView_show() { String empty_response = "{\"photos\":{\"page\":1,\"pages\":25,\"perpage\":20,\"total\":500,\"photo\":[],\"stat\":\"ok\"}"; setupMockServer(empty_response); // start Activity manually MainActivity activity = activityRule.lau
OkHttp3/Retrofit2でOAuth認証が必要なAPIを使った時のメモです。接続先ははてなさんのAPIです。なおサンプルはKotlinです。 準備 おなじみのOkHttp/retrofitのセットに加えてOAuth用のライブラリを追加 dependencies { ... compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.okhttp3:logging-interceptor:3.2.0' compile 'se.akerfeldt:okhttp-signpost:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' compile 'c
現時点では2.0.0-beta1が最新です。 Callアダプタというものが追加されています。以下のような特徴があるようです。 これ以外にDynamic URL,Dynamic Query Paramも便利そうです。 Simple HTTP with Retrofit 2 (Droidcon NYC 2015) by Jake Wharton Call encapsulates single request/response interaction Models a single request/response pair Separates request creation from response handling Each instance can only be used once.. ...instances can be cloned Supports both synchro
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く