FireBase Query. DataSnapshot
up vote
1
down vote
favorite
I need help on getting the "message" Object from this DataSnapshot result
DataSnapshot { key = user-4, value = {-JvFuwKX7r7o0ThXc0x8={sender=unit_owner, message=fkfkgkgkgkggkgkgkgkgkgkgkgkgkgkgkgkglgkgkgkgkgkgkgkg, role=unit_owner, profile_image=http://54.169.41.20/assets/boy-862a2e9036b094973c04afa1c0365a45.png, name=Paul Bartbartbart}} }
I am able to get the key value by getKey()
and I have JvFuwKX7r7o0ThXc0x8
as an Object as well, this is an automatic FireBase generated name of the object. Instead of listening to the object itself. How can I navigate trough, "sender" or "message" and getting its value by using DataSnapshot member methods?
java android firebase
add a comment |
up vote
1
down vote
favorite
I need help on getting the "message" Object from this DataSnapshot result
DataSnapshot { key = user-4, value = {-JvFuwKX7r7o0ThXc0x8={sender=unit_owner, message=fkfkgkgkgkggkgkgkgkgkgkgkgkgkgkgkgkglgkgkgkgkgkgkgkg, role=unit_owner, profile_image=http://54.169.41.20/assets/boy-862a2e9036b094973c04afa1c0365a45.png, name=Paul Bartbartbart}} }
I am able to get the key value by getKey()
and I have JvFuwKX7r7o0ThXc0x8
as an Object as well, this is an automatic FireBase generated name of the object. Instead of listening to the object itself. How can I navigate trough, "sender" or "message" and getting its value by using DataSnapshot member methods?
java android firebase
Can you share the JSON that you store in Firebase and the code that you use to retrieve it? I'm having a hard time parsing the Android output of it. I think I see the structure, but just want to make sure before typing an answer.
– Frank van Puffelen
Jul 29 '15 at 17:54
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I need help on getting the "message" Object from this DataSnapshot result
DataSnapshot { key = user-4, value = {-JvFuwKX7r7o0ThXc0x8={sender=unit_owner, message=fkfkgkgkgkggkgkgkgkgkgkgkgkgkgkgkgkglgkgkgkgkgkgkgkg, role=unit_owner, profile_image=http://54.169.41.20/assets/boy-862a2e9036b094973c04afa1c0365a45.png, name=Paul Bartbartbart}} }
I am able to get the key value by getKey()
and I have JvFuwKX7r7o0ThXc0x8
as an Object as well, this is an automatic FireBase generated name of the object. Instead of listening to the object itself. How can I navigate trough, "sender" or "message" and getting its value by using DataSnapshot member methods?
java android firebase
I need help on getting the "message" Object from this DataSnapshot result
DataSnapshot { key = user-4, value = {-JvFuwKX7r7o0ThXc0x8={sender=unit_owner, message=fkfkgkgkgkggkgkgkgkgkgkgkgkgkgkgkgkglgkgkgkgkgkgkgkg, role=unit_owner, profile_image=http://54.169.41.20/assets/boy-862a2e9036b094973c04afa1c0365a45.png, name=Paul Bartbartbart}} }
I am able to get the key value by getKey()
and I have JvFuwKX7r7o0ThXc0x8
as an Object as well, this is an automatic FireBase generated name of the object. Instead of listening to the object itself. How can I navigate trough, "sender" or "message" and getting its value by using DataSnapshot member methods?
java android firebase
java android firebase
asked Jul 29 '15 at 15:30
Aizen
1,0852520
1,0852520
Can you share the JSON that you store in Firebase and the code that you use to retrieve it? I'm having a hard time parsing the Android output of it. I think I see the structure, but just want to make sure before typing an answer.
– Frank van Puffelen
Jul 29 '15 at 17:54
add a comment |
Can you share the JSON that you store in Firebase and the code that you use to retrieve it? I'm having a hard time parsing the Android output of it. I think I see the structure, but just want to make sure before typing an answer.
– Frank van Puffelen
Jul 29 '15 at 17:54
Can you share the JSON that you store in Firebase and the code that you use to retrieve it? I'm having a hard time parsing the Android output of it. I think I see the structure, but just want to make sure before typing an answer.
– Frank van Puffelen
Jul 29 '15 at 17:54
Can you share the JSON that you store in Firebase and the code that you use to retrieve it? I'm having a hard time parsing the Android output of it. I think I see the structure, but just want to make sure before typing an answer.
– Frank van Puffelen
Jul 29 '15 at 17:54
add a comment |
2 Answers
2
active
oldest
votes
up vote
3
down vote
accepted
I looks like you're adding a value listener to something that has multiple children. I'm guessing it's a limitToLast(1)
query, but it would be really helpful if you include the code in your question. Until you do add it however, this is my guess of what your code looks like:
Firebase ref = new Firebase("https://yours.firebaseio.com");
Query messages = ref.orderByKey().limitToLast(1);
messages.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("Messages", dataSnapshot.toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
})
While you are limiting the filter to single message, you are still a list of messages. It's just a list of only 1 message.
This means that on onDataChange
you will still need to drill down into the child. Since you cannot do that by index, you will need to use a for
loop:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
String message = (String) chatSnapshot.child("message").getValue();
String sender = (String) chatSnapshot.child("sender").getValue();
}
}
Note that this gets a lot more readable if you take a moment to create a Java class that represents the message:
public class Chat {
String message;
String sender;
public String getMessage() { return message; }
public String getSender() { return sender; }
}
Then you can get the message with:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
Chat chat = chatSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
}
The above snippet still needs the for
loop, since you're still getting a list of 1 messages. If you want to get rid of that loop, you can register a child event listener:
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Chat chat = dataSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
// other overridden messages have been removed for brevity
})
Firebase will call the onChildAdded()
method for each child, so you don't have to look over them yourself.
This is the Best answer Detailed and clear. From all the queries I have seen in FireBase Tag. The only thing missing here is the List Approach. Which I actually use from your example Class. BTW the Class getValue Example that I tried, is sending me an error Bounce Type. So what I did to fix it is, put Static on my Class. I HAVE NO IDEA WHY IT WORKED.
– Aizen
Jul 29 '15 at 19:36
Hmmm... that sounds interesting, I've never had to make the class static, but I never use inner classes for these anyway. Can you open a new question for that debouncing problem? Post the JSON, you Java class and the code how you read it.
– Frank van Puffelen
Jul 29 '15 at 20:00
Sure, I will add that question. For later. For Now I am having a problem Trying to stop getting all of the collection, FireBase on Fire will throw me all of the Collection. Is it something to do with putting the Chat Class inside a Service? (Not an Intent Service). What I did is, I added the Chat Class where my Service Class is, and the FireBase Listeners are also in there. I will have to open up a Question about this, because I am not sure what might happen in the future.
– Aizen
Jul 29 '15 at 20:13
I can't say from your description. Post a question with a minimal-but-complete repro of the problem and I'll have a look. See stackoverflow.com/help/mcve
– Frank van Puffelen
Jul 29 '15 at 21:24
1
Incredibly enough somebody else today reached out with the same problem with an inner class. The reason is clear btw. A non-static inner class has an implicit reference to its containing class. And that's a field that Firebase cannot initialize for you when it deserializes. In other words: "bla bla bla... it must be static". :-)
– Frank van Puffelen
Jul 30 '15 at 0:18
|
show 1 more comment
up vote
1
down vote
The value will be returned as an Object
, as you've stated, but you can actually cast it to Map<String, Object>
since you know it should be a map.
So, do something like this:
Map<String, Object> val = (Map<String, Object>) dataSnapshot.getValue();
String message = (String) val.get("message");
String sender = (String) val.get("sender");
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
I looks like you're adding a value listener to something that has multiple children. I'm guessing it's a limitToLast(1)
query, but it would be really helpful if you include the code in your question. Until you do add it however, this is my guess of what your code looks like:
Firebase ref = new Firebase("https://yours.firebaseio.com");
Query messages = ref.orderByKey().limitToLast(1);
messages.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("Messages", dataSnapshot.toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
})
While you are limiting the filter to single message, you are still a list of messages. It's just a list of only 1 message.
This means that on onDataChange
you will still need to drill down into the child. Since you cannot do that by index, you will need to use a for
loop:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
String message = (String) chatSnapshot.child("message").getValue();
String sender = (String) chatSnapshot.child("sender").getValue();
}
}
Note that this gets a lot more readable if you take a moment to create a Java class that represents the message:
public class Chat {
String message;
String sender;
public String getMessage() { return message; }
public String getSender() { return sender; }
}
Then you can get the message with:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
Chat chat = chatSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
}
The above snippet still needs the for
loop, since you're still getting a list of 1 messages. If you want to get rid of that loop, you can register a child event listener:
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Chat chat = dataSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
// other overridden messages have been removed for brevity
})
Firebase will call the onChildAdded()
method for each child, so you don't have to look over them yourself.
This is the Best answer Detailed and clear. From all the queries I have seen in FireBase Tag. The only thing missing here is the List Approach. Which I actually use from your example Class. BTW the Class getValue Example that I tried, is sending me an error Bounce Type. So what I did to fix it is, put Static on my Class. I HAVE NO IDEA WHY IT WORKED.
– Aizen
Jul 29 '15 at 19:36
Hmmm... that sounds interesting, I've never had to make the class static, but I never use inner classes for these anyway. Can you open a new question for that debouncing problem? Post the JSON, you Java class and the code how you read it.
– Frank van Puffelen
Jul 29 '15 at 20:00
Sure, I will add that question. For later. For Now I am having a problem Trying to stop getting all of the collection, FireBase on Fire will throw me all of the Collection. Is it something to do with putting the Chat Class inside a Service? (Not an Intent Service). What I did is, I added the Chat Class where my Service Class is, and the FireBase Listeners are also in there. I will have to open up a Question about this, because I am not sure what might happen in the future.
– Aizen
Jul 29 '15 at 20:13
I can't say from your description. Post a question with a minimal-but-complete repro of the problem and I'll have a look. See stackoverflow.com/help/mcve
– Frank van Puffelen
Jul 29 '15 at 21:24
1
Incredibly enough somebody else today reached out with the same problem with an inner class. The reason is clear btw. A non-static inner class has an implicit reference to its containing class. And that's a field that Firebase cannot initialize for you when it deserializes. In other words: "bla bla bla... it must be static". :-)
– Frank van Puffelen
Jul 30 '15 at 0:18
|
show 1 more comment
up vote
3
down vote
accepted
I looks like you're adding a value listener to something that has multiple children. I'm guessing it's a limitToLast(1)
query, but it would be really helpful if you include the code in your question. Until you do add it however, this is my guess of what your code looks like:
Firebase ref = new Firebase("https://yours.firebaseio.com");
Query messages = ref.orderByKey().limitToLast(1);
messages.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("Messages", dataSnapshot.toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
})
While you are limiting the filter to single message, you are still a list of messages. It's just a list of only 1 message.
This means that on onDataChange
you will still need to drill down into the child. Since you cannot do that by index, you will need to use a for
loop:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
String message = (String) chatSnapshot.child("message").getValue();
String sender = (String) chatSnapshot.child("sender").getValue();
}
}
Note that this gets a lot more readable if you take a moment to create a Java class that represents the message:
public class Chat {
String message;
String sender;
public String getMessage() { return message; }
public String getSender() { return sender; }
}
Then you can get the message with:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
Chat chat = chatSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
}
The above snippet still needs the for
loop, since you're still getting a list of 1 messages. If you want to get rid of that loop, you can register a child event listener:
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Chat chat = dataSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
// other overridden messages have been removed for brevity
})
Firebase will call the onChildAdded()
method for each child, so you don't have to look over them yourself.
This is the Best answer Detailed and clear. From all the queries I have seen in FireBase Tag. The only thing missing here is the List Approach. Which I actually use from your example Class. BTW the Class getValue Example that I tried, is sending me an error Bounce Type. So what I did to fix it is, put Static on my Class. I HAVE NO IDEA WHY IT WORKED.
– Aizen
Jul 29 '15 at 19:36
Hmmm... that sounds interesting, I've never had to make the class static, but I never use inner classes for these anyway. Can you open a new question for that debouncing problem? Post the JSON, you Java class and the code how you read it.
– Frank van Puffelen
Jul 29 '15 at 20:00
Sure, I will add that question. For later. For Now I am having a problem Trying to stop getting all of the collection, FireBase on Fire will throw me all of the Collection. Is it something to do with putting the Chat Class inside a Service? (Not an Intent Service). What I did is, I added the Chat Class where my Service Class is, and the FireBase Listeners are also in there. I will have to open up a Question about this, because I am not sure what might happen in the future.
– Aizen
Jul 29 '15 at 20:13
I can't say from your description. Post a question with a minimal-but-complete repro of the problem and I'll have a look. See stackoverflow.com/help/mcve
– Frank van Puffelen
Jul 29 '15 at 21:24
1
Incredibly enough somebody else today reached out with the same problem with an inner class. The reason is clear btw. A non-static inner class has an implicit reference to its containing class. And that's a field that Firebase cannot initialize for you when it deserializes. In other words: "bla bla bla... it must be static". :-)
– Frank van Puffelen
Jul 30 '15 at 0:18
|
show 1 more comment
up vote
3
down vote
accepted
up vote
3
down vote
accepted
I looks like you're adding a value listener to something that has multiple children. I'm guessing it's a limitToLast(1)
query, but it would be really helpful if you include the code in your question. Until you do add it however, this is my guess of what your code looks like:
Firebase ref = new Firebase("https://yours.firebaseio.com");
Query messages = ref.orderByKey().limitToLast(1);
messages.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("Messages", dataSnapshot.toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
})
While you are limiting the filter to single message, you are still a list of messages. It's just a list of only 1 message.
This means that on onDataChange
you will still need to drill down into the child. Since you cannot do that by index, you will need to use a for
loop:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
String message = (String) chatSnapshot.child("message").getValue();
String sender = (String) chatSnapshot.child("sender").getValue();
}
}
Note that this gets a lot more readable if you take a moment to create a Java class that represents the message:
public class Chat {
String message;
String sender;
public String getMessage() { return message; }
public String getSender() { return sender; }
}
Then you can get the message with:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
Chat chat = chatSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
}
The above snippet still needs the for
loop, since you're still getting a list of 1 messages. If you want to get rid of that loop, you can register a child event listener:
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Chat chat = dataSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
// other overridden messages have been removed for brevity
})
Firebase will call the onChildAdded()
method for each child, so you don't have to look over them yourself.
I looks like you're adding a value listener to something that has multiple children. I'm guessing it's a limitToLast(1)
query, but it would be really helpful if you include the code in your question. Until you do add it however, this is my guess of what your code looks like:
Firebase ref = new Firebase("https://yours.firebaseio.com");
Query messages = ref.orderByKey().limitToLast(1);
messages.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("Messages", dataSnapshot.toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
})
While you are limiting the filter to single message, you are still a list of messages. It's just a list of only 1 message.
This means that on onDataChange
you will still need to drill down into the child. Since you cannot do that by index, you will need to use a for
loop:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
String message = (String) chatSnapshot.child("message").getValue();
String sender = (String) chatSnapshot.child("sender").getValue();
}
}
Note that this gets a lot more readable if you take a moment to create a Java class that represents the message:
public class Chat {
String message;
String sender;
public String getMessage() { return message; }
public String getSender() { return sender; }
}
Then you can get the message with:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()) {
Chat chat = chatSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
}
The above snippet still needs the for
loop, since you're still getting a list of 1 messages. If you want to get rid of that loop, you can register a child event listener:
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Chat chat = dataSnapshot.getValue(Chat.class);
String message = chat.getMessage();
String sender = chat.getSender();
}
// other overridden messages have been removed for brevity
})
Firebase will call the onChildAdded()
method for each child, so you don't have to look over them yourself.
answered Jul 29 '15 at 18:17
Frank van Puffelen
221k25362387
221k25362387
This is the Best answer Detailed and clear. From all the queries I have seen in FireBase Tag. The only thing missing here is the List Approach. Which I actually use from your example Class. BTW the Class getValue Example that I tried, is sending me an error Bounce Type. So what I did to fix it is, put Static on my Class. I HAVE NO IDEA WHY IT WORKED.
– Aizen
Jul 29 '15 at 19:36
Hmmm... that sounds interesting, I've never had to make the class static, but I never use inner classes for these anyway. Can you open a new question for that debouncing problem? Post the JSON, you Java class and the code how you read it.
– Frank van Puffelen
Jul 29 '15 at 20:00
Sure, I will add that question. For later. For Now I am having a problem Trying to stop getting all of the collection, FireBase on Fire will throw me all of the Collection. Is it something to do with putting the Chat Class inside a Service? (Not an Intent Service). What I did is, I added the Chat Class where my Service Class is, and the FireBase Listeners are also in there. I will have to open up a Question about this, because I am not sure what might happen in the future.
– Aizen
Jul 29 '15 at 20:13
I can't say from your description. Post a question with a minimal-but-complete repro of the problem and I'll have a look. See stackoverflow.com/help/mcve
– Frank van Puffelen
Jul 29 '15 at 21:24
1
Incredibly enough somebody else today reached out with the same problem with an inner class. The reason is clear btw. A non-static inner class has an implicit reference to its containing class. And that's a field that Firebase cannot initialize for you when it deserializes. In other words: "bla bla bla... it must be static". :-)
– Frank van Puffelen
Jul 30 '15 at 0:18
|
show 1 more comment
This is the Best answer Detailed and clear. From all the queries I have seen in FireBase Tag. The only thing missing here is the List Approach. Which I actually use from your example Class. BTW the Class getValue Example that I tried, is sending me an error Bounce Type. So what I did to fix it is, put Static on my Class. I HAVE NO IDEA WHY IT WORKED.
– Aizen
Jul 29 '15 at 19:36
Hmmm... that sounds interesting, I've never had to make the class static, but I never use inner classes for these anyway. Can you open a new question for that debouncing problem? Post the JSON, you Java class and the code how you read it.
– Frank van Puffelen
Jul 29 '15 at 20:00
Sure, I will add that question. For later. For Now I am having a problem Trying to stop getting all of the collection, FireBase on Fire will throw me all of the Collection. Is it something to do with putting the Chat Class inside a Service? (Not an Intent Service). What I did is, I added the Chat Class where my Service Class is, and the FireBase Listeners are also in there. I will have to open up a Question about this, because I am not sure what might happen in the future.
– Aizen
Jul 29 '15 at 20:13
I can't say from your description. Post a question with a minimal-but-complete repro of the problem and I'll have a look. See stackoverflow.com/help/mcve
– Frank van Puffelen
Jul 29 '15 at 21:24
1
Incredibly enough somebody else today reached out with the same problem with an inner class. The reason is clear btw. A non-static inner class has an implicit reference to its containing class. And that's a field that Firebase cannot initialize for you when it deserializes. In other words: "bla bla bla... it must be static". :-)
– Frank van Puffelen
Jul 30 '15 at 0:18
This is the Best answer Detailed and clear. From all the queries I have seen in FireBase Tag. The only thing missing here is the List Approach. Which I actually use from your example Class. BTW the Class getValue Example that I tried, is sending me an error Bounce Type. So what I did to fix it is, put Static on my Class. I HAVE NO IDEA WHY IT WORKED.
– Aizen
Jul 29 '15 at 19:36
This is the Best answer Detailed and clear. From all the queries I have seen in FireBase Tag. The only thing missing here is the List Approach. Which I actually use from your example Class. BTW the Class getValue Example that I tried, is sending me an error Bounce Type. So what I did to fix it is, put Static on my Class. I HAVE NO IDEA WHY IT WORKED.
– Aizen
Jul 29 '15 at 19:36
Hmmm... that sounds interesting, I've never had to make the class static, but I never use inner classes for these anyway. Can you open a new question for that debouncing problem? Post the JSON, you Java class and the code how you read it.
– Frank van Puffelen
Jul 29 '15 at 20:00
Hmmm... that sounds interesting, I've never had to make the class static, but I never use inner classes for these anyway. Can you open a new question for that debouncing problem? Post the JSON, you Java class and the code how you read it.
– Frank van Puffelen
Jul 29 '15 at 20:00
Sure, I will add that question. For later. For Now I am having a problem Trying to stop getting all of the collection, FireBase on Fire will throw me all of the Collection. Is it something to do with putting the Chat Class inside a Service? (Not an Intent Service). What I did is, I added the Chat Class where my Service Class is, and the FireBase Listeners are also in there. I will have to open up a Question about this, because I am not sure what might happen in the future.
– Aizen
Jul 29 '15 at 20:13
Sure, I will add that question. For later. For Now I am having a problem Trying to stop getting all of the collection, FireBase on Fire will throw me all of the Collection. Is it something to do with putting the Chat Class inside a Service? (Not an Intent Service). What I did is, I added the Chat Class where my Service Class is, and the FireBase Listeners are also in there. I will have to open up a Question about this, because I am not sure what might happen in the future.
– Aizen
Jul 29 '15 at 20:13
I can't say from your description. Post a question with a minimal-but-complete repro of the problem and I'll have a look. See stackoverflow.com/help/mcve
– Frank van Puffelen
Jul 29 '15 at 21:24
I can't say from your description. Post a question with a minimal-but-complete repro of the problem and I'll have a look. See stackoverflow.com/help/mcve
– Frank van Puffelen
Jul 29 '15 at 21:24
1
1
Incredibly enough somebody else today reached out with the same problem with an inner class. The reason is clear btw. A non-static inner class has an implicit reference to its containing class. And that's a field that Firebase cannot initialize for you when it deserializes. In other words: "bla bla bla... it must be static". :-)
– Frank van Puffelen
Jul 30 '15 at 0:18
Incredibly enough somebody else today reached out with the same problem with an inner class. The reason is clear btw. A non-static inner class has an implicit reference to its containing class. And that's a field that Firebase cannot initialize for you when it deserializes. In other words: "bla bla bla... it must be static". :-)
– Frank van Puffelen
Jul 30 '15 at 0:18
|
show 1 more comment
up vote
1
down vote
The value will be returned as an Object
, as you've stated, but you can actually cast it to Map<String, Object>
since you know it should be a map.
So, do something like this:
Map<String, Object> val = (Map<String, Object>) dataSnapshot.getValue();
String message = (String) val.get("message");
String sender = (String) val.get("sender");
add a comment |
up vote
1
down vote
The value will be returned as an Object
, as you've stated, but you can actually cast it to Map<String, Object>
since you know it should be a map.
So, do something like this:
Map<String, Object> val = (Map<String, Object>) dataSnapshot.getValue();
String message = (String) val.get("message");
String sender = (String) val.get("sender");
add a comment |
up vote
1
down vote
up vote
1
down vote
The value will be returned as an Object
, as you've stated, but you can actually cast it to Map<String, Object>
since you know it should be a map.
So, do something like this:
Map<String, Object> val = (Map<String, Object>) dataSnapshot.getValue();
String message = (String) val.get("message");
String sender = (String) val.get("sender");
The value will be returned as an Object
, as you've stated, but you can actually cast it to Map<String, Object>
since you know it should be a map.
So, do something like this:
Map<String, Object> val = (Map<String, Object>) dataSnapshot.getValue();
String message = (String) val.get("message");
String sender = (String) val.get("sender");
answered Jul 29 '15 at 16:22
nameless912
351111
351111
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f31704859%2ffirebase-query-datasnapshot%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
Can you share the JSON that you store in Firebase and the code that you use to retrieve it? I'm having a hard time parsing the Android output of it. I think I see the structure, but just want to make sure before typing an answer.
– Frank van Puffelen
Jul 29 '15 at 17:54