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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

Q&A

解決済

1回答

1710閲覧

RealtimeDatabase setValueが動作しない

Myuya69364760

総合スコア9

Firebase

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

0グッド

0クリップ

投稿2021/07/20 15:11

編集2021/07/23 05:46

実現したいこと

単純にRealtimeDatabaseを使用してusers/$uidという場所にUserというクラスを保存したいです。

問題

公式のドキュメント通りにgetReferenceで保存場所を指定して
setValueで値をセットさせて保存させようとしたのですが、
なぜか保存されないだけではなく、まず実行されているのかどうかも怪しく
エラーメッセージすら表示されないという状態です。

ファイル場所を指定する.getReference("users/$uid")ですが、users/$uidというフォルダは存在せず保存する際に同時に作成してもをうようにしたいと考えています。(usersフォルダも。あと、usersはルート直下です。)

エラー表示もないため自分では手も足も出ない状態です。
解決策をご存じの方がいらっしゃいましたら是非ご教授ください。

コード

kotlin:mainActivity.kt

1private fun saveUserToFirebaseDatabase(profileImageUri: String) { 2 val uid = FirebaseAuth.getInstance().uid ?: "" 3 val ref = FirebaseDatabase.getInstance().getReference("users/$uid") 4 val username = username_edittext_register.text.toString() 5 6 val user = User(uid, username, profileImageUri) 7 8 Log.d("value", "save start") 9 10 val result = ref.setValue(user).addOnSuccessListener { 11 Log.d("value", "Finally we saved the user to Firebase Database") 12 val intent = Intent(this, LatestMessagesActivity::class.java) 13 intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_CLEAR_TASK) 14 startActivity(intent) 15 }.addOnFailureListener { 16 Log.d("value", "save is not Success") 17 }.addOnCompleteListener { 18 Log.d("value", "save is Complete") 19 }.addOnCanceledListener { 20 Log.d("value", "save is Canceled") 21 } 22 23 // エラーがあるかどうか(使い方あってるか不明...) 24 Log.d("value", "save is: ${result.exception?.printStackTrace()}") 25 26 Log.d("value", "save end") 27} 28

kotlin:User.kt

1@Parcelize 2@IgnoreExtraProperties 3data class User(val uid: String, val username: String, val profileImageUri: String): Parcelable { 4 constructor(): this( "", "", "") 5}
  • gradle
dependencies { ........   // firebase implementation platform('com.google.firebase:firebase-bom:28.2.1') implementation 'com.google.firebase:firebase-analytics-ktx' // realtime database implementation platform('com.google.firebase:firebase-bom:28.2.0') implementation 'com.google.firebase:firebase-database-ktx' implementation 'com.google.firebase:firebase-database-ktx:20.0.0' }
  • Logcat
2021-07-23 14:45:29.857 12301-12301/com.example.realtimedatabasetest D/value: save start 2021-07-23 14:45:29.857 12301-12301/com.example.realtimedatabasetest D/value: save end 2021-07-23 14:45:29.876 12301-12301/com.example.realtimedatabasetest I/ViewRootImpl: jank_removeInvalidNode all the node in jank list is out of time 2

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

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

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

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

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

hoshi-takanori

2021/07/20 20:06

Logcat に Finally we saved the user to Firebase Database が表示されないなら setValue に失敗してるってことで、 addOnSuccessListener しかしてないので失敗は無視されてます。addOnFailureListener を追加してみては。
Myuya69364760

2021/07/21 09:28

質問の本文に修正コードとそのログを添付させていただきました。 上記の修正したコードで再度実行してみたのですが、今まで通りsetValueが動作した形跡が見えませんでした。 一応、「result.exception?.printStackTrace()」でエラーがあるかどうかを調べてみたのですが何もないみたいでした。。。
hoshi-takanori

2021/07/21 10:23

試しに動かしてみたら、ちゃんとデータベースに値が保存されて、Finally we saved 〜 と表示されましたよ。 気になる点としては、(setValue は動作すると思われますが) ・Firebase Auth でサインインしてない状態では、uid が "" になり、users 直下に uid や username などが保存されます。 ・setValue は非同期で処理されるので、エラーの表示は addOnFailureListener でやらないと意味がありません。 ・build.gradle で、firebase-bom を複数書く必要はないはず。また、firebase-bom でバージョン指定されるので、firebase-database-ktx:20.0.0 も不要。
Myuya69364760

2021/07/21 13:54

返信が遅くなり申し訳ありません。 いろいろ試した結果と途中経過のご報告をさせていただきます。 ・プロジェクト内で作用しあい悪影響が出ている可能性があったため、新規にプロジェクトを立てRealtimeDatabaseの機能のみを実装し実行しましたがなぜか同じ結果でした。(保存されずLogも出さない) ・Firebaseにフィンガープリントを設定し実行 -> 影響なし(そりゃそう...) というのが現状です。 ですが、新規にプロジェクトを立ち上げても動かないのは明らかに基盤となるところが問題になっていると思います。 自分が思い当たる節としては以前AndroidStudio4.2.2にアップグレードをしたのですが、このバージョンは不具合があるという声を聞いたことがあるので、もしかしたらここが原因かもしれません。 もしよろしければお使いのAndroidStudioのバージョンを教えていただけると参考になります。
hoshi-takanori

2021/07/21 15:20

自分は M1 Mac 上の Arctic Fox 2020.3.1 RC1 を使ってますが、試しに別のマシン (x86 Mac) の Android 4.2.2 でビルドして動かしてもちゃんと動きましたよ。動作環境は実機 (Pixel 4a) です。念のため、Android のネットワークが繋がってるかご確認ください。
Myuya69364760

2021/07/21 16:14

夜遅くに対応していただいてありがとうございます。 Android4.2.2でも動いたんですね、了解です。一応4.1.3で実行してみたのですが、結果は変わりませんでした。 ネットワークに関してはAVDでサイトや動画が普通に使えるので問題はないと思います。
Myuya69364760

2021/07/22 03:02

一応こちらが問題のコードのGithubになります。 https://github.com/Myuy973/RealtimeDatabaseTestRepository もしこれで 動作したら -> AndroidStudioのセッティングが問題 動作しなかったら -> Firebaseの設定、コードに問題がある と考えていますので、動作テストしていただけたら幸いです。
hoshi-takanori

2021/07/22 03:23

Android Studio 4.1.3 でビルドして動かしてみましたが、save start, save end, save success と表示されました。
Myuya69364760

2021/07/22 05:24

承知いたしました。試していただきありがとうございます。 動作した場合AndroidStudioの設定に問題があるといったのですが、どこをどう手を付けようか悩んでいます。 個人的にはAVDの設定・プラグイン側の不具合?などがあるのかと無理やり当てはめようとはしてますがいまいちしっくりきません。。。 自分のAndroidStudioだけ動かないという場合どういった原因がほかに考えられるでしょうか?
hoshi-takanori

2021/07/22 08:25

Firebase Auth でのサインインや、Realtime Database からの情報の取得はできますか?
Myuya69364760

2021/07/22 08:32

Authでのサインインやstorageに保存などrealtimedatabase以外は使うことができるのですが、realtimedatabaseでの保存や取得ができない状態です。
Myuya69364760

2021/07/23 05:32

Logをよく見てみるとメソッドを実行したと同時によくわからないLogが追加されていました。 もしかしたらここに原因があるかもしれませんので載せさせていただきます。 今更ですが申し訳ありませんでした。
guest

回答1

0

自己解決

何とか解決できましたが、解決方法・原因がはっきりわかりませんでした。
一応解決方法を列挙
・ google-services.jsonの再インストール
・ フィンガープリントの設定(どっちも)
・ gradleのdependenciesの整理(本当に必要なものだけ)
・ androidstudioをキャッシュを消して再起動

自分はこの方法を試していくことで解決できました。
もし参考になれば幸いです。

hoshi-takanori様長々とお付き合いいただきありがとうございました。

投稿2021/07/26 14:28

Myuya69364760

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問