この記事はRxJava Advent Calendar 2015 11日目の記事です。 RxJava・RxAndroidの紹介記事の中にはよく「面倒くさいASyncTaskを使わなくて済む」といったRxJavaを非同期処理の代わりとして紹介されています。 もちろん、非同期処理を置き換えられるという点はRxJavaの有効的な使い方の一つですが、RxJavaには他にも便利に使える機能があります。 今回はそれらの機能の一つであるSubjectについて紹介したいと思います。 Subjectとは 短く言うと「SubscriberとObservableの2つの機能を併せ持ったもの」です。 SubscriberにあるようなonNextやonError、onCompleteといったメソッドを呼び出せ、Observableのようにsubscribeメソッドを呼び出すことができます。 Observable.c
Retrofit + RxJava (+RxAndroid) で以下のようなちょっと複雑なユースケースはどう書けばよいのかなと調べてみたら defer と onErrorResumeNext を使えばよいんじゃないか、という話 (ただしRetrofitは関係ない話になった)。 参考: retrofit with rxjava handling network exceptions globally ユースケース ユーザ情報を取得するAPIを叩く(認証が必要なAPI) 401が返ってきたら、アクセストークンを再度取得する処理を行う アクセストークンの再取得に成功した場合は、新しいアクセストークンを使って、もとのリクエスト(ユーザ情報の取得)をもう1回行う アクセストークンの再取得に失敗した場合は、ログイン画面に飛ばす 実装 private void getUser() { Observabl
例えば◯秒間操作がなかったらパスキーロック画面を表示する、とかそういうの。普通に作るとタイマーを使って面倒な感じになっちゃいますが、RxJava と RxAndroid を使うととても簡単にできます。 RxJava + RxAnroid の場合 例えば、画面に EditBox と Button があって、「文字列の入力」と「ボタンが押されたか」を監視、◯秒間操作がなかったら××する、という処理をしたい時、RxJava+RxAndroid では以下のように書けます。 public class MyActivity extends Activity { private static final String TAG = "MyActivity"; private Subscription _subscription; @Override protected void onCreate(Bund
http://weather.livedoor.com/forecast/webservice/json/v1?city=200010 { "pinpointLocations": [ { "link": "http://weather.livedoor.com/area/forecast/2020100", "name": "長野市" }, { "link": "http://weather.livedoor.com/area/forecast/2020700", "name": "須坂市" }, { "link": "http://weather.livedoor.com/area/forecast/2021100", "name": "中野市" }, { "link": "http://weather.livedoor.com/area/forecast/2021200", "nam
dependencies { ext.rx_android_kotlin_version = '0.3.0' 中略 compile 'io.reactivex:rxandroid:1.0.1' compile 'io.reactivex:rxjava:1.0.14' compile "com.jakewharton.rxbinding:rxbinding-kotlin:$rx_android_kotlin_version" compile "com.jakewharton.rxbinding:rxbinding-support-v4-kotlin:$rx_android_kotlin_version" compile "com.jakewharton.rxbinding:rxbinding-appcompat-v7-kotlin:$rx_android_kotlin_version" }
RxAndroidをv1.0.0に更新していたところ、AppObservableの部分がすべてエラーになっており、それを解消するまでに案外手間取ってしまったのでそのメモ AppObservableとは ActivityやFragment内部でObservable#subscribe()を呼んだ際、そのActivityやFragmentが終了された以降にもonNextやonCompletedが呼ばれてしまうことがあります。 その結果、画面が破棄された状態で画面更新を行おうとしてしまうことでのエラーや、ObservableがActivityやFragmentへの強参照を持ったままになってしまうことによるメモリリークが発生してしまいます。 それを防ぐためにonPauseなどで明示的にSubscription#unsubscribe()を呼んであげる必要がありました。 そのunsubscribeの
この記事は2015年08月21日に書かれた記事です。 c88でエンジニア系の本を買って興味を持ったのでRxAndroidを試してみた! RxAndroidとは RxAndroidはRxJavaのAndroid用の拡張モジュールです。 RxJavaは主に非同期処理を行うことが出来るライブラリです。 またObserverパターンに踏襲しているため、サードパーティーのライブラリとの連携も可能です。 ECMA6からJavascriptに標準搭載される予定のPromiseみたいなものです。 ここではPromise.whenみたいなことをやろうとしてます。 jQueryを使うとこんな感じです。javascriptは簡単ですね var baseUrl = "http://api.openweathermap.org/data/2.5/weather?q="; $.when( $.getJSON(base
https://github.com/gfx/RxT4A これは何 RxAndroidのフォーク RxBindingの機能は実装しない 動機 RxAndroidの先行きが不透明 社内で作ってるRxJava用ユーティリティを公開したい(未着手) RxJavaのベストプラクティスやバッドくラクティスを example/ に提供したい(未着手) 提供しているもの AndroidSchedulers - main threadで実行するスケジューラ AndroidCompositeSubscription - CompositeSubscription をAndroidコンポーネントで使いやすくしたもの OperatorAddToCompositeSubscription - method chain中に AndroidCompositeSubscription#add() をするためのオペレータ
※これもう大分古いので AndroidでJava8環境 2016 - visible true も御覧ください。 はじめに RxAndroid(というかRxJava)とRetrolambdaでそろそろ大体Java8な環境でAndroidアプリケーションが開発出来るのではないかと考えて試してみた。 2014年4月頃のRetrolambdaはまだ1.1.4とかでlambdaをおまけ程度に使える程度で「あー戯れって感じねはいはい」という事でスルーしていたんだけど、最近久しぶりに覗いたら1.8.0まで育っていてTry-with-resources*1やMethod referencesがサポートされていた。 また、RxJavaは1.0.0が11月にリリースされて実用段階に入ってきており、Java8のStream APIを概ね補完する様な機能を持っている。 更にAndroidでRxJavaを扱うため
例えばショッピングサイトとかの発送先指定のフォーム『登録されている住所とは違う住所に送りたい時、「別の住所に送る」をチェックする、すると「住所2」が必須入力となり、入力するまで次へ進めない』的なちょっと込み入ったValidationをReactive ExtensionsのJava版、RxJavaとRxAndroidでやってみました。 動作イメージ まずいきなり動作結果から。 住所1は入力必須。 住所2は「住所2へ配送する」がチェックされている場合のみ、入力必須。 必須項目が入力されていない場合はボタンを押せない こんな仕様です。 実装 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activ
はじめに @rejuspotaroさんの関数型言語を学ぶことは実務でどう役に立ったかを見てRxJavaを使ってみたくなりました。また、iOSのSwiftとAndroidのGroovyを見て、RxJavaをAndroidで使うなら、Groovyでだなと思いました。 また、上記の記事では、言及されていませんでしたがRxAndroidというものがあるようです。Viewのクリックのストリームや、EditTextの変更のストリームを生成するメソッドが用意されているみたいです。 今まで私は、RxJavaをちょっと試してみるならGroovy(これとこれ)とか、RxGroovyについて投稿していましたが、今回やっとRxAndroid、RxJavaをGroovyで使ってみたいと思います。 ボタンクリック回数を表示 ボタンクリックの回数をTextViewに表示したいと思います。(ええ、分かっていますよ。Rx使
REST 処理を扱いやすく実装する Android の REST クライアントのネットワーク処理と非同期処理について、最近流行っている OkHTTP と Retrofit と RxAndroid の組み合わせを使ってみました。これらはそれぞれ次のような機能を提供するライブラリです。 OkHTTP HTTP クライアント用のライブラリ HTTP2/SPDY などのプロトコルにも対応 HTTP ヘッダーのポリシーに準拠したローカルキャッシュの実装 Retrofit REST クライアント用のライブラリ アノテーションでメソッドやパラメータを指定可能 通信処理は抽象化されているため自由に実装可能 RxAndroid RxJava の Android 版 リアクティブプログラミングを Android で実装するためのライブラリ イベントベースで遅延実行や非同期コールバックなどを実装可能 なお、Re
はじめに 仕事で作っているアプリで非同期処理のコールバックが地獄めいてきて吐きそうになったので そのあたりをバッチリ解決するためのアレコレを模索していた。 そんな折にKeithYokomaさんがQiitaに海外記事の翻訳を公開したのを読んで、一念発起したという具合です。 ReactiveExtensions - 【翻訳】AsyncTask と AsyncTaskLoader を rx.Observable に置き換える - RxJava Android Patterns - Qiita EventBusを使う方法も考えたのだけど、あれはLocalBroadcast使うまでもないときに発動させるのがいいんだろうな、という感想です。 そんなわけで、色々と見たこと・考えたことを備忘録としてまとめました。 参考にしたサイトたち だいたいこれ読んどけばOKみたいなそんな感じです。 入門 Reacti
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く