Java async update from Firebase eventlistener
up vote
0
down vote
favorite
I have section of code that updates a variable by the return of a Firebase query. Outside of this section, I reference that variable and print it.
However, it seems to be executing as a async operation and prints out the variable before it has any values put in so I keep getting null
. Is there an on complete
for addListenerForSingleValueEvent
?
public Map<String, String> childKV;
public Map<String, Object> allChildren;
public getChild() {
allChildren = new HashMap<>();
DatabaseReference dbRef = fb.child("inventory");
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot childSnap : snapshot.getChildren() {
childKV = new HashMap<>();
childKV.put(
childSnap.getKey(),childSnap.getValue()
);
allChildren.put(childSnap.getKey(), childKV);
}
}
@Override
...
};
dbRef.orderByKey().addListenerForSingleValueEvent(listener);
dbRef.removeEventListener(listener);
printChildren(allChildren);
}
public void printChildren(Map<String,Object>) {...}
Edit:
Like Update value of variable from Firebase query? but for Java. Does this mean I have to use reflection?
java firebase firebase-realtime-database nosql
add a comment |
up vote
0
down vote
favorite
I have section of code that updates a variable by the return of a Firebase query. Outside of this section, I reference that variable and print it.
However, it seems to be executing as a async operation and prints out the variable before it has any values put in so I keep getting null
. Is there an on complete
for addListenerForSingleValueEvent
?
public Map<String, String> childKV;
public Map<String, Object> allChildren;
public getChild() {
allChildren = new HashMap<>();
DatabaseReference dbRef = fb.child("inventory");
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot childSnap : snapshot.getChildren() {
childKV = new HashMap<>();
childKV.put(
childSnap.getKey(),childSnap.getValue()
);
allChildren.put(childSnap.getKey(), childKV);
}
}
@Override
...
};
dbRef.orderByKey().addListenerForSingleValueEvent(listener);
dbRef.removeEventListener(listener);
printChildren(allChildren);
}
public void printChildren(Map<String,Object>) {...}
Edit:
Like Update value of variable from Firebase query? but for Java. Does this mean I have to use reflection?
java firebase firebase-realtime-database nosql
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have section of code that updates a variable by the return of a Firebase query. Outside of this section, I reference that variable and print it.
However, it seems to be executing as a async operation and prints out the variable before it has any values put in so I keep getting null
. Is there an on complete
for addListenerForSingleValueEvent
?
public Map<String, String> childKV;
public Map<String, Object> allChildren;
public getChild() {
allChildren = new HashMap<>();
DatabaseReference dbRef = fb.child("inventory");
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot childSnap : snapshot.getChildren() {
childKV = new HashMap<>();
childKV.put(
childSnap.getKey(),childSnap.getValue()
);
allChildren.put(childSnap.getKey(), childKV);
}
}
@Override
...
};
dbRef.orderByKey().addListenerForSingleValueEvent(listener);
dbRef.removeEventListener(listener);
printChildren(allChildren);
}
public void printChildren(Map<String,Object>) {...}
Edit:
Like Update value of variable from Firebase query? but for Java. Does this mean I have to use reflection?
java firebase firebase-realtime-database nosql
I have section of code that updates a variable by the return of a Firebase query. Outside of this section, I reference that variable and print it.
However, it seems to be executing as a async operation and prints out the variable before it has any values put in so I keep getting null
. Is there an on complete
for addListenerForSingleValueEvent
?
public Map<String, String> childKV;
public Map<String, Object> allChildren;
public getChild() {
allChildren = new HashMap<>();
DatabaseReference dbRef = fb.child("inventory");
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot childSnap : snapshot.getChildren() {
childKV = new HashMap<>();
childKV.put(
childSnap.getKey(),childSnap.getValue()
);
allChildren.put(childSnap.getKey(), childKV);
}
}
@Override
...
};
dbRef.orderByKey().addListenerForSingleValueEvent(listener);
dbRef.removeEventListener(listener);
printChildren(allChildren);
}
public void printChildren(Map<String,Object>) {...}
Edit:
Like Update value of variable from Firebase query? but for Java. Does this mean I have to use reflection?
java firebase firebase-realtime-database nosql
java firebase firebase-realtime-database nosql
asked Nov 8 at 4:04
I should change my Username
1338
1338
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
Indeed, the eventListeners
have asynchronous behaviour and thus you have correctly understood your problem.
Unfortunately the solution I have is that you may have to change your approach because of this. So you should go for an event driven approach. Hence, instead of "wait for the data to come and and then do my thing", I would "when the data comes in, do my thing".
Meaning according to your problem, print the value inside the onDataChange()
method of your singleValueEventListener
, this would ensure that you don't get null and also you retrieve your value correctly.
Other than that, one more approach I found, when I searched though, is Task.await()
. I won't be counting on it, but you may read more about that here:
StackOverflow Question
StackOverflow Answer
MyonDataChange()
is getting fired for every child record (which equates to a row in the csv). But then it would only write one line over and over to the csv. I woud like to put the return value to a map, then write it. However, if I usemap.put(snapshot.getValue())
, and put the write at the end, it would just write nulls. p.s. Is this theTask
that was deprecated forApiFuture
?
– I should change my Username
Nov 8 at 10:01
Sorry but I didn't quite get what you want to do from your code, if you could provide your database structure and tell what you want to do, I may be of a bit more help :)
– PradyumanDixit
Nov 8 at 10:52
@IshouldchangemyUsername if you found my answer useful, consider voting it up and marking it as correct, I'd appreciate that. Cheers! :)
– PradyumanDixit
Nov 10 at 6:29
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
Indeed, the eventListeners
have asynchronous behaviour and thus you have correctly understood your problem.
Unfortunately the solution I have is that you may have to change your approach because of this. So you should go for an event driven approach. Hence, instead of "wait for the data to come and and then do my thing", I would "when the data comes in, do my thing".
Meaning according to your problem, print the value inside the onDataChange()
method of your singleValueEventListener
, this would ensure that you don't get null and also you retrieve your value correctly.
Other than that, one more approach I found, when I searched though, is Task.await()
. I won't be counting on it, but you may read more about that here:
StackOverflow Question
StackOverflow Answer
MyonDataChange()
is getting fired for every child record (which equates to a row in the csv). But then it would only write one line over and over to the csv. I woud like to put the return value to a map, then write it. However, if I usemap.put(snapshot.getValue())
, and put the write at the end, it would just write nulls. p.s. Is this theTask
that was deprecated forApiFuture
?
– I should change my Username
Nov 8 at 10:01
Sorry but I didn't quite get what you want to do from your code, if you could provide your database structure and tell what you want to do, I may be of a bit more help :)
– PradyumanDixit
Nov 8 at 10:52
@IshouldchangemyUsername if you found my answer useful, consider voting it up and marking it as correct, I'd appreciate that. Cheers! :)
– PradyumanDixit
Nov 10 at 6:29
add a comment |
up vote
2
down vote
accepted
Indeed, the eventListeners
have asynchronous behaviour and thus you have correctly understood your problem.
Unfortunately the solution I have is that you may have to change your approach because of this. So you should go for an event driven approach. Hence, instead of "wait for the data to come and and then do my thing", I would "when the data comes in, do my thing".
Meaning according to your problem, print the value inside the onDataChange()
method of your singleValueEventListener
, this would ensure that you don't get null and also you retrieve your value correctly.
Other than that, one more approach I found, when I searched though, is Task.await()
. I won't be counting on it, but you may read more about that here:
StackOverflow Question
StackOverflow Answer
MyonDataChange()
is getting fired for every child record (which equates to a row in the csv). But then it would only write one line over and over to the csv. I woud like to put the return value to a map, then write it. However, if I usemap.put(snapshot.getValue())
, and put the write at the end, it would just write nulls. p.s. Is this theTask
that was deprecated forApiFuture
?
– I should change my Username
Nov 8 at 10:01
Sorry but I didn't quite get what you want to do from your code, if you could provide your database structure and tell what you want to do, I may be of a bit more help :)
– PradyumanDixit
Nov 8 at 10:52
@IshouldchangemyUsername if you found my answer useful, consider voting it up and marking it as correct, I'd appreciate that. Cheers! :)
– PradyumanDixit
Nov 10 at 6:29
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
Indeed, the eventListeners
have asynchronous behaviour and thus you have correctly understood your problem.
Unfortunately the solution I have is that you may have to change your approach because of this. So you should go for an event driven approach. Hence, instead of "wait for the data to come and and then do my thing", I would "when the data comes in, do my thing".
Meaning according to your problem, print the value inside the onDataChange()
method of your singleValueEventListener
, this would ensure that you don't get null and also you retrieve your value correctly.
Other than that, one more approach I found, when I searched though, is Task.await()
. I won't be counting on it, but you may read more about that here:
StackOverflow Question
StackOverflow Answer
Indeed, the eventListeners
have asynchronous behaviour and thus you have correctly understood your problem.
Unfortunately the solution I have is that you may have to change your approach because of this. So you should go for an event driven approach. Hence, instead of "wait for the data to come and and then do my thing", I would "when the data comes in, do my thing".
Meaning according to your problem, print the value inside the onDataChange()
method of your singleValueEventListener
, this would ensure that you don't get null and also you retrieve your value correctly.
Other than that, one more approach I found, when I searched though, is Task.await()
. I won't be counting on it, but you may read more about that here:
StackOverflow Question
StackOverflow Answer
answered Nov 8 at 9:22
PradyumanDixit
2,4412818
2,4412818
MyonDataChange()
is getting fired for every child record (which equates to a row in the csv). But then it would only write one line over and over to the csv. I woud like to put the return value to a map, then write it. However, if I usemap.put(snapshot.getValue())
, and put the write at the end, it would just write nulls. p.s. Is this theTask
that was deprecated forApiFuture
?
– I should change my Username
Nov 8 at 10:01
Sorry but I didn't quite get what you want to do from your code, if you could provide your database structure and tell what you want to do, I may be of a bit more help :)
– PradyumanDixit
Nov 8 at 10:52
@IshouldchangemyUsername if you found my answer useful, consider voting it up and marking it as correct, I'd appreciate that. Cheers! :)
– PradyumanDixit
Nov 10 at 6:29
add a comment |
MyonDataChange()
is getting fired for every child record (which equates to a row in the csv). But then it would only write one line over and over to the csv. I woud like to put the return value to a map, then write it. However, if I usemap.put(snapshot.getValue())
, and put the write at the end, it would just write nulls. p.s. Is this theTask
that was deprecated forApiFuture
?
– I should change my Username
Nov 8 at 10:01
Sorry but I didn't quite get what you want to do from your code, if you could provide your database structure and tell what you want to do, I may be of a bit more help :)
– PradyumanDixit
Nov 8 at 10:52
@IshouldchangemyUsername if you found my answer useful, consider voting it up and marking it as correct, I'd appreciate that. Cheers! :)
– PradyumanDixit
Nov 10 at 6:29
My
onDataChange()
is getting fired for every child record (which equates to a row in the csv). But then it would only write one line over and over to the csv. I woud like to put the return value to a map, then write it. However, if I use map.put(snapshot.getValue())
, and put the write at the end, it would just write nulls. p.s. Is this the Task
that was deprecated for ApiFuture
?– I should change my Username
Nov 8 at 10:01
My
onDataChange()
is getting fired for every child record (which equates to a row in the csv). But then it would only write one line over and over to the csv. I woud like to put the return value to a map, then write it. However, if I use map.put(snapshot.getValue())
, and put the write at the end, it would just write nulls. p.s. Is this the Task
that was deprecated for ApiFuture
?– I should change my Username
Nov 8 at 10:01
Sorry but I didn't quite get what you want to do from your code, if you could provide your database structure and tell what you want to do, I may be of a bit more help :)
– PradyumanDixit
Nov 8 at 10:52
Sorry but I didn't quite get what you want to do from your code, if you could provide your database structure and tell what you want to do, I may be of a bit more help :)
– PradyumanDixit
Nov 8 at 10:52
@IshouldchangemyUsername if you found my answer useful, consider voting it up and marking it as correct, I'd appreciate that. Cheers! :)
– PradyumanDixit
Nov 10 at 6:29
@IshouldchangemyUsername if you found my answer useful, consider voting it up and marking it as correct, I'd appreciate that. Cheers! :)
– PradyumanDixit
Nov 10 at 6:29
add a comment |
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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.
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%2f53201405%2fjava-async-update-from-firebase-eventlistener%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