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

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

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

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1551閲覧

unityでfirebaseのrealtimedatabaseからデータを取得

kimkim

総合スコア142

Firebase

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/10/18 09:45

前提・実現したいこと

FirebaseのRealtimeDataBaseに保存しているデータを取得して
ランキングを作成したいです。

現在のデータ構造はこうなっています。
イメージ説明

データを取得するメソッドは以下のようになっています

public void getRanking(){ //RealtileDataBaseから現在のランキングを取得 //bossNoのノードからtimeで昇順ソートして最大10件を取る(非同期) reference.Child("ranking").OrderByChild("score").LimitToFirst(10).GetValueAsync().ContinueWith(task =>{ if(task.IsFaulted){ //取得失敗 //Handle the Error Debug.Log("error"); }else if(task.IsCompleted){ //取得成功 DataSnapshot snapshot = task.Result; //結果取得 Debug.Log(snapshot); IEnumerator<DataSnapshot> en = snapshot.Children.GetEnumerator(); //結果リストをenumeratorで処理 int rank = 1; while(en.MoveNext()){ //1件ずつ処理 DataSnapshot data = en.Current; //データ取る string name = (string)data.Child("username").GetValue(true); //名前取る string score = (string)data.Child("score").GetValue(true); //スコアを取る Debug.Log("name:" + name + " score:" + score); /* //Textに反映 GameObject row = rankingSpace.transform.GetChild(rank).gameObject; row.transform.GetChild(0).gameObject.GetComponent<Text>().text = rank.ToString(); //順位 row.transform.GetChild(1).gameObject.GetComponent<Text>().text = score; //スコア row.transform.GetChild(2).gameObject.GetComponent<Text>().text = name; //名前*/ rank++; } } }); }

http://sleepnel.hatenablog.com/entry/2017/01/26/124500

このサイトを参考にしました。

発生している問題・エラーメッセージ

この状態でデバッグするとコンソールに以下のように表示され

2018-10-18 18:26:51.325065+0900 Trampoline[17731:7065346] 5.9.0 - [Firebase/Database][I-RDB034028] Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding ".indexOn": "score" at /ranking to your security rules for better performance DataSnapshot { key = ranking, value = System.Collections.Generic.Dictionary`2[System.String,System.Object] } FirebaseManager:<getRanking>m__1(Task`1) System.Threading.Tasks.<ContinueWith>c__AnonStorey0:<>m__0(Task) System.Threading.Tasks.<ContinueWith>c__AnonStorey2:<>m__0(Task) System.Threading.Tasks.<ContinueWith>c__AnonStorey1:<>m__0() System.Threading.Tasks.Task:<immediateExecutor>m__1(Action) System.Threading.Tasks.Task`1:RunContinuations() System.Threading.Tasks.Task`1:TrySetResult(T) System.Threading.Tasks.TaskCompletionSource`1:SetResult(T) System.Threading.Tasks.<ContinueWith>c__AnonStorey0:<>m__0(Task) System.Threading.Tasks.<ContinueWith>c__AnonStorey2:<>m__0(Task) System.Threading.Tasks.<ContinueWith>c__AnonStorey1:<>m__0() System.Threading.Tasks.Task:<immediateExecutor>m__1(Action) System.Threading.Tasks.Task`1:RunContinuations() System.Threading.Tasks.Task`1:TrySetResult(T) System.Threading.Tasks.TaskCompletionSource`1:SetResult(T) Firebase.Database.Internal.<GetTask>c__AnonStorey0:<>m__0() Firebase.Database.Internal.Future_InternalDataSnapshot:SWIG_CompletionDispatcher(Int32) Firebase.AppUtil:PollCallbacks() Firebase.Platform.FirebaseHandler:Update() (Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Debug.bindings.h Line: 43)

ここの部分が表示されません。

Debug.Log("name:" + name + " score:" + score);

score順に並べ替えて、usernameとscoreを取得する方法を教えていただきたいです。
よろしくお願いします。

もしくは、取得したDataSnapshotから"name"と"score"を取得する方法を教えていただきたいです。

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

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

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

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

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

guest

回答1

0

自己解決

string name = (string)data.Child("username").GetValue(true); //名前取る string score = (string)data.Child("score").GetValue(true); //スコアを取る

というキャストの仕方がダメだったみたいです。

string name = data.Child("username").GetValue(true).ToString(); //名前取る string score = data.Child("score").GetValue(true).ToString(); //スコアを取る

にしたところ、無事できました。

投稿2018/10/18 13:15

kimkim

総合スコア142

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問