前提 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で書いているアプリで、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
(この記事はRxJavaとOkHttpを知っている前提で進めていきます。またこの記事はRxJavaすごーいしたいだけの記事です。401のハンドリングのところは、RxJavaを使いたいだけのユースケースというか1例になります。) この記事のサンプルコードは ここ(Github)にあります。 API周りの開発をしていて、401のときの処理をどうするかという永遠の課題があると思います。 クライアント側で頑張るとしたら以下の感じになるかなと思います。 OkHttpのAuthenticatorを使い、そこで401のときのハンドリングをする。公式ドキュメントのリンク OkHttpのInterceptorを使い、そこで401のときのハンドリングをする。公式ドキュメントのリンク 各処理(例えばRxJavaのTransformerとか)に401用の処理を埋め込んで、retryを掛ける。 などがあるかなと(O
大学の授業の副手で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
どうも!スマートフォンアプリチームの岩田です! 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(
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
たまたまChangeLogを読んだので、気になったポイントを紹介します。 Package名を変更した 3系になってcom.squareup.okhttpからokhttp3に変更されています。理由はJakeのブログに詳しく書かれていますが、要約すると、2系のコードと共存出来るようにすることで、部分的/段階的に3系のコードを取り入れることを可能にして、バージョンアップの負担を減らすことが目的のようです。 グローバルなconnection poolの仕組みがなくなった 2系は全てのOkHttpClientのインスタンスがグローバルなコネクションプールを共有していたらしいのですが(知らなかった... )、それがなくなりました。 そのため、3系では一つのOkHttpClientインスタンスをアプリケーション全体で使いまわすことが薦められています。 OkHttpClientが不変になった 2系のOkH
AWS Device farm を使って、Google Playストアでの見え方を確認してみようかともがいた話。AndroidAWS 私達の会社では、Playストア掲載用の画像はデザインの担当に作ってもらっています。 で、「特定の端末でだけ、見にくいよ〜」などのフィードバックが必要であればしたいところです。 ただ、そのためだけに確認用端末を買うわけにはいきませんね。 ということで、最近でたAWS Device farmを使って、撮ってみましょう、と思い立ったのです。 個人的に、へんなDSL使うのは好きではないのと、 そもそもテスト対象はアプリではないので、 uiautomatorを使います。 ざっくりいうと Google Playで、スクリーンショットを撮りたいターゲットのページにはちゃんと遷移できているっぽい スクリーンショットを撮って、保存すること自体はうまくいっているっぽい AWS
Android の通信ライブラリでおなじみの OkHttp で、通信に時間がかかる状況を再現させることができます。 Retrofit や Glide で OkHttp を使っている場合でももちろん OK です。 背景 通信に時間がかかる場合の、アプリの UI/UX を確認したい。 フリーズしたように見えないか 適度に進捗表示をしているか 画面遷移後の通信のコールバック処理が適切かどうかを確認したい。 うまく対処していない場合、下のようなエラーになります getActivity() が null を返す View 操作で NullPointerException Fragment 操作で java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 実現方法 OkHttp の In
Retrofit 1.9.0 を使っていたコードをRetrofit 2.0.0-beta3に書き換えてみたら思いのほか変更が多くて大変でした。 全体的に、Retrofit自体がOkHttpのみに依存するようになったことで、OkHttpと重複する機能が削られるなどインターフェイス全域にわたる大きな変更が加えられました。またOkHttpも3.0となり、OkHttpClient, Request, Responseなどがimmutable classになっています。 修正パッチはこんな感じです: migration to Retrofit2 / OkHttp3 by gfx · Pull Request #36 · gfx/Android-Helium · GitHub このAndroidアプリのWeb API呼び出しは次のような特徴を備えています。 API endpointは3つ うち2つはJ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く