質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

2回答

1365閲覧

[android] getter内での非同期処理

tigyy

総合スコア7

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/07/15 16:34

あるオブジェクトのgetterを呼び出して下記のような挙動をとりたい時、どのように実現すればよいでしょうか?
・値が設定されいればそのまま値を返却
・値が設定されていなければ非同期でAPIなどと通信し、その結果を取得し、その値を返却

イメージ

class User {
String name;
public String getName() {
if (name != null) {
return name;
}
// 無かった場合、非同期で値を取得し、結果を返却
}

RxJava利用しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

どのくらい RxJava に依存したプログラムにするかで変わりますが、全面的に RxJava を使うのであれば、以下のようになります。

java

1String _name; 2 3public Observable<String> getNameAsObservable() { 4 return Observable.<String>create(new Observable.OnSubscribe<String>() { 5 @Override 6 public void call(Subscriber<? super String> subscriber) { 7 if (_name != null) { 8 // 値が設定されいればそのまま値を返却 9 subscriber.onNext(_name); 10 subscriber.onCompleted(); 11 return; 12 } 13 14 // 無かった場合、非同期で値を取得し、結果を返却 15 someAsyncFunc(new OnSomeCallback() { 16 void callback(String returnValue) { 17 subscriber.onNext(_name); 18 subscriber.onCompleted(); 19 } 20 }); 21 } 22 }); 23}

getter 自体を Observable<String> にし、利用する側でこれを subscribe() します。
「非同期処理」のところが RxJava に対応したライブラリがあるのなら、それを利用した方がより簡単に書けます。

参考)

投稿2016/07/23 03:11

amay077

総合スコア1075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

RxJavaの書き方はわかりませんが、通常のJavaだと引数にinterfaceを渡してコールバックして貰うとできそうですね。
なにかのヒントになればいいのですが。

投稿2016/07/16 06:33

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問