Realtime database using firebase - retrieving a specific information












0















So I am trying to create a real-time multiplayer quiz. I am using the Google Real-time Multiplayer API together with the firebase real-time database.



At the beginning of the game, users are prompted to ask themselves a question and provide two answers, where 1 answer is correct. Then this information is sent do Firebase Real-time Database under the child "Games" -- "mRoomId" --- "userId"



The variable uniqueRoomID is the specific id of the room which they players are retrieving from the Google API.



DatabaseReference myRef = database.getReference("Games").child(mRoomId).child(userId);


And I send 4 values with the setValue function to that specific reference.



Upload upload = new Upload(question,answer1,answer2, userId);

myRef.setValue(upload);


My database tree is as follows



My Realtime Database Structure



My question is:



When I present a question to the other user later in the game, I don't want to show my own question, only the other user's question is relevant.



This is my valueEventListener:



 myReference = FirebaseDatabase.getInstance().getReference().child("Games").child(mRoomId);
myReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});


And this is the method showData();



private void showData (DataSnapshot dataSnapshot){

for(DataSnapshot ds : dataSnapshot.getChildren()){

Upload upload = ds.getValue(Upload.class);
Log.d("TAG", "question1 is " + upload.getQuestion1() );

}


}



The log in showData is returning two different questions from the database because it loops through the children.



How do I get only one of the questions that is relevant to be presented to the user playing the game ?



Should I structure this differently, or is there a way to get only the values that are relevant to me?










share|improve this question




















  • 1





    Please add the code that you using now.

    – Alex Mamo
    Nov 19 '18 at 11:28











  • Which quiz question are you talking about (I can't see any node in your database named like that), how do you present a user the question. Please clear things out, the question is too ambiguous at the moment.

    – PradyumanDixit
    Nov 19 '18 at 14:52













  • I have updated my question with relevant code

    – Guy Dude
    Nov 20 '18 at 16:55
















0















So I am trying to create a real-time multiplayer quiz. I am using the Google Real-time Multiplayer API together with the firebase real-time database.



At the beginning of the game, users are prompted to ask themselves a question and provide two answers, where 1 answer is correct. Then this information is sent do Firebase Real-time Database under the child "Games" -- "mRoomId" --- "userId"



The variable uniqueRoomID is the specific id of the room which they players are retrieving from the Google API.



DatabaseReference myRef = database.getReference("Games").child(mRoomId).child(userId);


And I send 4 values with the setValue function to that specific reference.



Upload upload = new Upload(question,answer1,answer2, userId);

myRef.setValue(upload);


My database tree is as follows



My Realtime Database Structure



My question is:



When I present a question to the other user later in the game, I don't want to show my own question, only the other user's question is relevant.



This is my valueEventListener:



 myReference = FirebaseDatabase.getInstance().getReference().child("Games").child(mRoomId);
myReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});


And this is the method showData();



private void showData (DataSnapshot dataSnapshot){

for(DataSnapshot ds : dataSnapshot.getChildren()){

Upload upload = ds.getValue(Upload.class);
Log.d("TAG", "question1 is " + upload.getQuestion1() );

}


}



The log in showData is returning two different questions from the database because it loops through the children.



How do I get only one of the questions that is relevant to be presented to the user playing the game ?



Should I structure this differently, or is there a way to get only the values that are relevant to me?










share|improve this question




















  • 1





    Please add the code that you using now.

    – Alex Mamo
    Nov 19 '18 at 11:28











  • Which quiz question are you talking about (I can't see any node in your database named like that), how do you present a user the question. Please clear things out, the question is too ambiguous at the moment.

    – PradyumanDixit
    Nov 19 '18 at 14:52













  • I have updated my question with relevant code

    – Guy Dude
    Nov 20 '18 at 16:55














0












0








0








So I am trying to create a real-time multiplayer quiz. I am using the Google Real-time Multiplayer API together with the firebase real-time database.



At the beginning of the game, users are prompted to ask themselves a question and provide two answers, where 1 answer is correct. Then this information is sent do Firebase Real-time Database under the child "Games" -- "mRoomId" --- "userId"



The variable uniqueRoomID is the specific id of the room which they players are retrieving from the Google API.



DatabaseReference myRef = database.getReference("Games").child(mRoomId).child(userId);


And I send 4 values with the setValue function to that specific reference.



Upload upload = new Upload(question,answer1,answer2, userId);

myRef.setValue(upload);


My database tree is as follows



My Realtime Database Structure



My question is:



When I present a question to the other user later in the game, I don't want to show my own question, only the other user's question is relevant.



This is my valueEventListener:



 myReference = FirebaseDatabase.getInstance().getReference().child("Games").child(mRoomId);
myReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});


And this is the method showData();



private void showData (DataSnapshot dataSnapshot){

for(DataSnapshot ds : dataSnapshot.getChildren()){

Upload upload = ds.getValue(Upload.class);
Log.d("TAG", "question1 is " + upload.getQuestion1() );

}


}



The log in showData is returning two different questions from the database because it loops through the children.



How do I get only one of the questions that is relevant to be presented to the user playing the game ?



Should I structure this differently, or is there a way to get only the values that are relevant to me?










share|improve this question
















So I am trying to create a real-time multiplayer quiz. I am using the Google Real-time Multiplayer API together with the firebase real-time database.



At the beginning of the game, users are prompted to ask themselves a question and provide two answers, where 1 answer is correct. Then this information is sent do Firebase Real-time Database under the child "Games" -- "mRoomId" --- "userId"



The variable uniqueRoomID is the specific id of the room which they players are retrieving from the Google API.



DatabaseReference myRef = database.getReference("Games").child(mRoomId).child(userId);


And I send 4 values with the setValue function to that specific reference.



Upload upload = new Upload(question,answer1,answer2, userId);

myRef.setValue(upload);


My database tree is as follows



My Realtime Database Structure



My question is:



When I present a question to the other user later in the game, I don't want to show my own question, only the other user's question is relevant.



This is my valueEventListener:



 myReference = FirebaseDatabase.getInstance().getReference().child("Games").child(mRoomId);
myReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});


And this is the method showData();



private void showData (DataSnapshot dataSnapshot){

for(DataSnapshot ds : dataSnapshot.getChildren()){

Upload upload = ds.getValue(Upload.class);
Log.d("TAG", "question1 is " + upload.getQuestion1() );

}


}



The log in showData is returning two different questions from the database because it loops through the children.



How do I get only one of the questions that is relevant to be presented to the user playing the game ?



Should I structure this differently, or is there a way to get only the values that are relevant to me?







java android firebase firebase-realtime-database






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 20 '18 at 14:55







Guy Dude

















asked Nov 19 '18 at 11:19









Guy DudeGuy Dude

61




61








  • 1





    Please add the code that you using now.

    – Alex Mamo
    Nov 19 '18 at 11:28











  • Which quiz question are you talking about (I can't see any node in your database named like that), how do you present a user the question. Please clear things out, the question is too ambiguous at the moment.

    – PradyumanDixit
    Nov 19 '18 at 14:52













  • I have updated my question with relevant code

    – Guy Dude
    Nov 20 '18 at 16:55














  • 1





    Please add the code that you using now.

    – Alex Mamo
    Nov 19 '18 at 11:28











  • Which quiz question are you talking about (I can't see any node in your database named like that), how do you present a user the question. Please clear things out, the question is too ambiguous at the moment.

    – PradyumanDixit
    Nov 19 '18 at 14:52













  • I have updated my question with relevant code

    – Guy Dude
    Nov 20 '18 at 16:55








1




1





Please add the code that you using now.

– Alex Mamo
Nov 19 '18 at 11:28





Please add the code that you using now.

– Alex Mamo
Nov 19 '18 at 11:28













Which quiz question are you talking about (I can't see any node in your database named like that), how do you present a user the question. Please clear things out, the question is too ambiguous at the moment.

– PradyumanDixit
Nov 19 '18 at 14:52







Which quiz question are you talking about (I can't see any node in your database named like that), how do you present a user the question. Please clear things out, the question is too ambiguous at the moment.

– PradyumanDixit
Nov 19 '18 at 14:52















I have updated my question with relevant code

– Guy Dude
Nov 20 '18 at 16:55





I have updated my question with relevant code

– Guy Dude
Nov 20 '18 at 16:55












1 Answer
1






active

oldest

votes


















0














There is no way to exclude a specific child node from a query. This means that (as far as I can see) you have two basic options:




  1. Read both child nodes, and remove your own node client side based on the fact that its DataSnapshot.getKey() has the same value as User.getUid().

  2. Read only the child node of the other player. This requires that you somehow already know the key/UID of the other player, but would allow you to then load only that player's data with DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);


Also see:




  • is it possible query data that are not equal to the specified condition?

  • Firebase retrieving all children except one

  • Firebase : How to read every child node in parent except children with particular data






share|improve this answer
























  • 1: In my case the getKey is actually returning the child "mRoomId" which is identical for user1 and user2. 2: I have tried to find a way to easily share this information between the two users (userId), but I have no luck at the moment. It will get more complex later in the development because it might include 3- or 4 users aswell..

    – Guy Dude
    Nov 20 '18 at 14:59













Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53373519%2frealtime-database-using-firebase-retrieving-a-specific-information%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














There is no way to exclude a specific child node from a query. This means that (as far as I can see) you have two basic options:




  1. Read both child nodes, and remove your own node client side based on the fact that its DataSnapshot.getKey() has the same value as User.getUid().

  2. Read only the child node of the other player. This requires that you somehow already know the key/UID of the other player, but would allow you to then load only that player's data with DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);


Also see:




  • is it possible query data that are not equal to the specified condition?

  • Firebase retrieving all children except one

  • Firebase : How to read every child node in parent except children with particular data






share|improve this answer
























  • 1: In my case the getKey is actually returning the child "mRoomId" which is identical for user1 and user2. 2: I have tried to find a way to easily share this information between the two users (userId), but I have no luck at the moment. It will get more complex later in the development because it might include 3- or 4 users aswell..

    – Guy Dude
    Nov 20 '18 at 14:59


















0














There is no way to exclude a specific child node from a query. This means that (as far as I can see) you have two basic options:




  1. Read both child nodes, and remove your own node client side based on the fact that its DataSnapshot.getKey() has the same value as User.getUid().

  2. Read only the child node of the other player. This requires that you somehow already know the key/UID of the other player, but would allow you to then load only that player's data with DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);


Also see:




  • is it possible query data that are not equal to the specified condition?

  • Firebase retrieving all children except one

  • Firebase : How to read every child node in parent except children with particular data






share|improve this answer
























  • 1: In my case the getKey is actually returning the child "mRoomId" which is identical for user1 and user2. 2: I have tried to find a way to easily share this information between the two users (userId), but I have no luck at the moment. It will get more complex later in the development because it might include 3- or 4 users aswell..

    – Guy Dude
    Nov 20 '18 at 14:59
















0












0








0







There is no way to exclude a specific child node from a query. This means that (as far as I can see) you have two basic options:




  1. Read both child nodes, and remove your own node client side based on the fact that its DataSnapshot.getKey() has the same value as User.getUid().

  2. Read only the child node of the other player. This requires that you somehow already know the key/UID of the other player, but would allow you to then load only that player's data with DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);


Also see:




  • is it possible query data that are not equal to the specified condition?

  • Firebase retrieving all children except one

  • Firebase : How to read every child node in parent except children with particular data






share|improve this answer













There is no way to exclude a specific child node from a query. This means that (as far as I can see) you have two basic options:




  1. Read both child nodes, and remove your own node client side based on the fact that its DataSnapshot.getKey() has the same value as User.getUid().

  2. Read only the child node of the other player. This requires that you somehow already know the key/UID of the other player, but would allow you to then load only that player's data with DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);


Also see:




  • is it possible query data that are not equal to the specified condition?

  • Firebase retrieving all children except one

  • Firebase : How to read every child node in parent except children with particular data







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 19 '18 at 15:39









Frank van PuffelenFrank van Puffelen

233k29380406




233k29380406













  • 1: In my case the getKey is actually returning the child "mRoomId" which is identical for user1 and user2. 2: I have tried to find a way to easily share this information between the two users (userId), but I have no luck at the moment. It will get more complex later in the development because it might include 3- or 4 users aswell..

    – Guy Dude
    Nov 20 '18 at 14:59





















  • 1: In my case the getKey is actually returning the child "mRoomId" which is identical for user1 and user2. 2: I have tried to find a way to easily share this information between the two users (userId), but I have no luck at the moment. It will get more complex later in the development because it might include 3- or 4 users aswell..

    – Guy Dude
    Nov 20 '18 at 14:59



















1: In my case the getKey is actually returning the child "mRoomId" which is identical for user1 and user2. 2: I have tried to find a way to easily share this information between the two users (userId), but I have no luck at the moment. It will get more complex later in the development because it might include 3- or 4 users aswell..

– Guy Dude
Nov 20 '18 at 14:59







1: In my case the getKey is actually returning the child "mRoomId" which is identical for user1 and user2. 2: I have tried to find a way to easily share this information between the two users (userId), but I have no luck at the moment. It will get more complex later in the development because it might include 3- or 4 users aswell..

– Guy Dude
Nov 20 '18 at 14:59




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53373519%2frealtime-database-using-firebase-retrieving-a-specific-information%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

鏡平學校

ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

Why https connections are so slow when debugging (stepping over) in Java?