前提 Retrofit + RxJavaを使ったAPI通信時に、デフォルトではHTTP 200番台以外のステータスコードはエラーとして onError(throwable) に渡ってくる。 その場合は retrofit2.HttpException 型になっているため、onError 内で if (throwable instanceof HttpException) すれば個別にハンドリング可能であるが、これが使いやすいかどうかは議論の余地があるように思う。 個人的には、リカバリ不能なエラー(たとえばサーバダウンやネットワーク不達)以外は onNext で受け取りたい。 1 理由は2つあって、 onErrorにくるとそのObservableは終了するので RxBinding + REST の組み合わせのようなObservableと相性が良くない。 エラー理由をJSONで返すAPIは、でき
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
(この記事はRxJavaとOkHttpを知っている前提で進めていきます。またこの記事はRxJavaすごーいしたいだけの記事です。401のハンドリングのところは、RxJavaを使いたいだけのユースケースというか1例になります。) この記事のサンプルコードは ここ(Github)にあります。 API周りの開発をしていて、401のときの処理をどうするかという永遠の課題があると思います。 クライアント側で頑張るとしたら以下の感じになるかなと思います。 OkHttpのAuthenticatorを使い、そこで401のときのハンドリングをする。公式ドキュメントのリンク OkHttpのInterceptorを使い、そこで401のときのハンドリングをする。公式ドキュメントのリンク 各処理(例えばRxJavaのTransformerとか)に401用の処理を埋め込んで、retryを掛ける。 などがあるかなと(O
複数のホストに並行してHTTPリクエストを送るコードをJavaで書く必要があって、Undertowをサーバに使ってるんでUndertowの http client でもいいかなーと思ってたんだけど、okhttpにも非同期リクエストの機能があるみたい。 ただパッと見て実行スレッド数の設定とかどうなっとるんや、というのが全くわかんなかったのでちょっとコードを追ってみたところ、以下のような感じのコードを発見しました。 呼び出し順としてはの以下ような感じ。 OkHttpClient.newCall(Request req) Call.enqueue(Callback callback) RealCall.enqueue(Callback callback) client.dispatcher().enqueue(new AsyncCall(responseCallback)); ココ なんで、この
大学の授業の副手でJavaでWebAPIを使ったプログラムについてまとめることになったのでここにまとめます。 使用するライブラリ Okhttp - square gson - Google JavaでHTTP通信だったりJSONを扱うのに一から自分で書くのって結構つらいですよね。 またエラーハンドリングとかしっかりやらないととても使えるものにはならないと思います。 よって今回はライブラリを使います。 ※ 勉強するのにライブラリ使って良いのかよって思う人もいると思いますが、今回はサクッと使えるようなサンプル用意してくれっていうオーダーだったのでライブラリは使用します。 使用するWebAPI Livedoor Weather Web Service Livedoorが提供している天気予報APIです。 てきとうに選びました。まぁ認証は無しのAPIならなんでも良かったです。 HTTP通信 通信部分
概要 HTTP Client のテストで役立つライブラリ MockWebServer について調べてみました。 MockWebServer とは OkHttp のテストをするために作ったのだろうと思われるライブラリで、OkHttp のリポジトリ内にプロジェクトがあります。ライセンスは Apache License, Version 2.0 です。 HTTP 通信部分を Mock 化するのに使えます。今日日、 HTTP 通信を使わないアプリケーションもそうそうないでしょうから、需要は結構ありそうな感じがします。 OkHttp とは Android 向けの便利なライブラリを大量に作っている Square, Inc. の開発した HTTP Client です。普通の Java ライブラリなので、Web アプリケーションや業務アプリケーションでも利用できます Android 界隈では Apache
##はじめに OkHttp2とOkHttp3とでコネクションプールの部分が大きく変わっている。 Change Logからの引用。 There is no longer a global singleton connection pool. In OkHttp 2.x, all OkHttpClient instances shared a common connection pool by default. In OkHttp 3.x, each new OkHttpClient gets its own private connection pool. Applications should avoid creating many connection pools as doing so prevents connection reuse. Each connection pool ho
どうも!スマートフォンアプリチームの岩田です! IoTLT Advent Calendar 2016の15日目の記事です。 最近、社内に導入されているSlackの絵文字を追加することが小さな楽しみになっています。前回の記事で懸念していた健康診断は血圧が高めになりそうだということをこの場を借りてご報告させていただきます。 今回は少し業務から離れて、社内LT大会やIoTLTで発表した「Minecraft x IoT」の補足記事を書いていきます。 発表を見ていない方はSlideShareにて資料を共有していますので一読していただけると幸いです。 IoTを駆使してゲームの世界と現実の世界を組み合わせた新しいMinecraftの遊び方を紹介していきたいと思います。 使うもの さっそく新しい遊び方を実現するために必要なものたちを紹介します。 Minecraft PC版 Wio Node ボタン LED
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で渡すの
はじめに OkHttpのバージョンが3になりいくつか変更点がありましたので変更点も含めてOkHttpの使い方をご紹介します。 Rxを使わずシンプルにOkHttpだけで通信処理をしています。 今回もいつもと同じopenweathermapを使っています。 OkHttp2とOkHttp3の違い まず OkHttpの使い方のおさらいです。 - Requestオブジェクト作る - OkHttpオブジェクト作る - enqueue()メソッドにコールバックを定義する [OkHttp2] Request request = new Request.Builder() .url("http://api.openweathermap.org/data/2.5/weather?id=2172797&APPID=464b981be2248f383ab898810xxxxxxx") .get() .build(
class HatenaOAuthManager(private val consumerKey: String, private val consumerSecret: String) { companion object { private val REQUEST_TOKEN_ENDPOINT_URL = "https://www.hatena.com/oauth/initiate" private val ACCESS_TOKEN_ENDPOINT_URL = "https://www.hatena.com/oauth/token" private val AUTHORIZATION_WEBSITE_URL = "https://www.hatena.ne.jp/touch/oauth/authorize" val AUTHORIZATION_DENY_URL = "$AUTHORI
たまたまChangeLogを読んだので、気になったポイントを紹介します。 Package名を変更した 3系になってcom.squareup.okhttpからokhttp3に変更されています。理由はJakeのブログに詳しく書かれていますが、要約すると、2系のコードと共存出来るようにすることで、部分的/段階的に3系のコードを取り入れることを可能にして、バージョンアップの負担を減らすことが目的のようです。 グローバルなconnection poolの仕組みがなくなった 2系は全てのOkHttpClientのインスタンスがグローバルなコネクションプールを共有していたらしいのですが(知らなかった... )、それがなくなりました。 そのため、3系では一つのOkHttpClientインスタンスをアプリケーション全体で使いまわすことが薦められています。 OkHttpClientが不変になった 2系のOkH
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く