2017-07-31 12 views
0

私のAndroidアプリでは、Google Firebaseを使用してデータベースに情報を保存しています。Androidファイアベースdb datasnapshot誤ったdbディレクトリから情報を引き出す

私はあなたが私がdataSnapshot後に「.child( 『Lobby_Requestsを』)」置くことに気づくかもしれ情報を反復処理する必要があり、forループの下

public void showDataLobReq(DataSnapshot dataSnapshot){ 

    for(DataSnapshot ds : dataSnapshot.child("Lobby_Requests").getChildren()){ 
     System.out.println("asdfasdfasdfasdfasdf"+ds.getValue()); 
     game = ds.child(userID).child("game").getValue(String.class); 
     console = ds.child(userID).child("console").getValue(String.class); 
     mic = ds.child(userID).child("mic").getValue(String.class); 
     players = ds.child(userID).child("players").getValue(String.class); 
    } 


} 

を使用されています。これは、dataSnapshotがデータベース全体のスナップショットをとるため、「Lobby_Requests」サブディレクトリに移動する必要があります。なぜなら、これは、反復処理が必要な情報であるからです。

この '.child()'は問題になります。

forループの最初の行にdataSnapshotに含まれているものと、実際のデータベースのディレクトリ "Lobbies"から情報を引き出している.child( "Lobby_Requests"ディレクトリ。

ただし、 '.child()'を完全に削除すると、データベース全体が表示されるようになります。なぜこれをやっているのですか?

リスナーのためのコード:ここで

nRef = mFirebaseDatabase.getReference(); 
    nRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.exists()){ 
       showDataLobReq(dataSnapshot); 
      } else { 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

はJSONです:

{ 


"Games" : { 
    "Forza 6" : { 
     "Consoles" : { 
     "PC" : true, 
     "Xbox 1" : true, 
     "Xbox 360" : true 
     }, 
     "FilePathName" : "forza6", 
     "Genres" : { 
     "Racing" : true 
     }, 
     "Live Lobbies" : 0, 
     "Name" : "Forza 6" 
    }, 
    "Minecraft" : { 
     "Consoles" : { 
     "PC" : true, 
     "Xbox 1" : true, 
     "Xbox 360" : true 
     }, 
     "FilePathName" : "minecraft", 
     "Genres" : { 
     "Adventure" : true, 
     "Creation" : true, 
     "Open World" : true 
     }, 
     "Live Lobbies" : 0, 
     "Name" : "Minecraft" 
    } 
    }, 
    "Lobbies" : { 
    "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { 
     "Messages" : { 
     "-Kq6-1HsMvElEXZZyCIk" : { 
      "messageText" : "hey", 
      "messageTime" : 1501208519771, 
      "messageUser" : "" 
     } 
     }, 
     "console" : "Origin", 
     "game" : "Minecraft", 
     "leader" : "Cd6lVd2XMUYoLH6b0xoHsrfXMud2", 
     "mic" : "Mic", 
     "note" : "2345", 
     "players" : "4" 
    }, 
    "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : { 
     "console" : "Steam", 
     "game" : "Forza 6", 
     "mic" : "No Mic", 
     "note" : "Hey Join Here!", 
     "players" : "2" 
    }, 
    "hpWkq0D8clPReUetOq9Xtmc4V582" : { 
     "Messages" : { 
     "-Kq5a0kX305lFCRTSM_G" : { 
      "messageText" : "hello", 
      "messageTime" : 1501201701014, 
      "messageUser" : "" 
     }, 
     "-Kq5asufOWQwtmyNJrQ7" : { 
      "messageText" : "hey", 
      "messageTime" : 1501201926941, 
      "messageUser" : "" 
     } 
     }, 
     "console" : "Xbox One", 
     "game" : "Minecraft", 
     "leader" : "hpWkq0D8clPReUetOq9Xtmc4V582", 
     "mic" : "Mic", 
     "note" : "kjhg", 
     "players" : "4" 
    } 
    }, 
    "Lobby_Requests" : { 
    "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { 
     "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { 
     "console" : "Xbox One", 
     "game" : "Forza 6", 
     "mic" : "Mic", 
     "players" : "5" 
     } 
    }, 
    "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : { 
     "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : { 
     "console" : "Steam", 
     "game" : "Forza 6", 
     "mic" : "No Mic", 
     "players" : "2" 
     } 
    }, 
    "hpWkq0D8clPReUetOq9Xtmc4V582" : { 
     "hpWkq0D8clPReUetOq9Xtmc4V582" : { 
     "console" : "Xbox One", 
     "game" : "Minecraft", 
     "mic" : "Mic", 
     "players" : "4" 
     }, 
     "players" : "4" 
    } 
    }, 
    "users" : { 
    "8cHrNCybwjO3PIUKxyOLiAqxJBv1" : { 
     "gamertag" : "thedylan", 
     "uname" : "thedood" 
    }, 
    "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { 
     "gamertag" : "dmdylan", 
     "uname" : "ninja goat" 
    }, 
    "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : { 
     "gamertag" : "skaner", 
     "uname" : "asdf" 
    }, 
    "YvYEIiCBUSYKTviVyWpLHdyDIFw1" : { 
     "gamertag" : "joejoe", 
     "uname" : "Jifflingly" 
    }, 
    "ZmX9yIZ6MNguQa1S3MaYNcxfK2b2" : { 
     "gamertag" : "dmkaner", 
     "uname" : "dmkaner" 
    }, 
    "hpWkq0D8clPReUetOq9Xtmc4V582" : { 
     "gamertag" : "dmkaner", 
     "uname" : "dmkaner" 
    }, 
    "t21ncnuRmeV4F7RknETBisMrxS42" : { 
     "gamertag" : "asdf", 
     "uname" : "asdf" 
    } 
    } 
} 
+0

パス "Lobby_Requests"にfirebase listenerのコードを投稿できますか? – Mani

+0

@Maniありがとうございました – dylan

+0

あなたのファイアベースのインスタンシングが疑わしいです Firebase firebase = new Firebase( "YOUR_PATH_TOFIREBASE_LOCATION"); – Mani

答えて

1

あなたのコード内の問題は、あなたが二回あなたのデータをプッシュしているし、このための必要がないことです。あなたはそのデータをプッシュすることにより、Firebaseデータベースにデータを追加する方法を変更します場合

"Lobby_Requests" : { 
     "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { 
      "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { //This is wrong 

一度だけ、あなたのコードは正常に動作します。データベースは次のようになります。

"Lobby_Requests" : { 
    "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { 
    "console" : "Xbox One", 
    "game" : "Forza 6", 
    "mic" : "Mic", 
    "players" : "5" 
    }, 

ご覧のとおり、押したキーは1つのみです。

+0

これは問題ではありませんが、実際にこの問題を解決するために手動でデータを2回プッシュしました。この問題は、データが1回だけプッシュされても持続しました。 – dylan

+0

同じ場所に2つの押されたIDを持つ子供が1人いるかどちらかの子供がいる場合、それは機能しません。今のようにデータベース構造を更新していただけますか?あなたはコードがうまくいくはずですから。間違ったものは含んでいません。 –

+1

@dylan:プッシュIDが1つしかないときにコードがうまくいかないかもしれませんが、間違って2回押すことはできません。 Alexが言っていることをしてもあなたの問題は完全には解決されませんが、少なくともMCVE(http://stackoverflow.com/help/mcve)に近づくでしょう。 –