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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1372閲覧

Firebaseのデータを返したい

Nippun

総合スコア1147

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/02/28 15:08

編集2020/02/28 16:58

Firebaseのデータを関数を読んで返したいのですがjava.lang.IllegalStateException: Task is not yet completeがでてうまく動きません。

どうすればFirebaseのデータだけ返却できますか?

UserRepo側

Kotlin

1fun getUser(userId: String): User? { 2 var data: User? = null 3 userRef.document(userId).get().addOnSuccessListener { documentSnapshot -> 4 if (documentSnapshot.exists()) { 5 data = documentSnapshot.toObject(User::class.java) 6 } 7 } 8 return data 9 }

activity側

Koltin

1val userData = UserRepository.getUser(user.uid)

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

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

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

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

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

hoshi-takanori

2020/02/28 15:28

Firebaseのデータは非同期で返ってくるので、非同期処理を行う必要があります。
Nippun

2020/02/28 15:47

すみませんがどのようにするのか教えていただけませんか? Suspend使ってみたのですがうまくいきませんでした
hoshi-takanori

2020/02/28 16:19 編集

getUserからはFirebaseの結果は返せませんので、結果を受け取るラムダ式の中に処理を書く必要があります。getUserを使って処理を行う側のコードも貼ってくれたら、もうちょっとましなアドバイスができると思います。
Nippun

2020/02/28 16:53

変更しました
hoshi-takanori

2020/02/28 17:08

その userData をどう使うかの問題なので、それじゃなにもわかりません。 とりあえず TextView にユーザー名を表示するとかなら、if (documentSnapshot.exists()) { の中で textView.setText() することになると思います。
Nippun

2020/02/29 01:06

やはりそうなりますよね。 そのデータだけ抜き取るのは、難しそうですね
guest

回答1

0

ベストアンサー

コメントでsuspendとあったので、coroutinesを使った実装例です。
org.jetbrains.kotlinx:kotlinx-coroutines-play-services のawaitを利用しています。

kotlin

1suspend fun getUser(userId: String): User? { 2 return userRef.document(userId) 3 .get() 4 .await() // データが取得されるまで待機 5 .takeIf { it.exists() } // existsがfalseならnullを返す 6 ?.toObject(User::class.java) 7}

投稿2020/03/01 23:05

編集2020/03/01 23:33
kakajika

総合スコア3131

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問