onChildAdded in FirebaseRecyclerAdapter
mMessages
is a method. I have an SQLite table, and every time a new message is received I want to add +1 to a column. That's what the mMessages()
method does, but instead of adding +1 every time a new child is added, it adds all the existing children every time I open the activity.
Say, support in table, the value is 10 and I have 5 children in the RecyclerView
, and I open it, and before I even receive a new child, the table gets +5 added because there are 5 existing children.
I don't want this to happen, but I want +1 to be added only when a new child is added. How can I achieve this?
@Override
protected void onBindViewHolder(@NonNull final Chat.MessagesViewHolder holder, final int position, @NonNull final MessagesHelper model) {
holder.setMessage(model.getMessage());
final String userId = getRef(position).getKey();
final DatabaseReference mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(MessageSenderId).child(MessageRecieverId);
Query messageQuery = mTimeReference.limitToLast(10);
messageQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessagesHelper message = dataSnapshot.getValue(MessagesHelper.class);
mMessages();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
java


add a comment |
mMessages
is a method. I have an SQLite table, and every time a new message is received I want to add +1 to a column. That's what the mMessages()
method does, but instead of adding +1 every time a new child is added, it adds all the existing children every time I open the activity.
Say, support in table, the value is 10 and I have 5 children in the RecyclerView
, and I open it, and before I even receive a new child, the table gets +5 added because there are 5 existing children.
I don't want this to happen, but I want +1 to be added only when a new child is added. How can I achieve this?
@Override
protected void onBindViewHolder(@NonNull final Chat.MessagesViewHolder holder, final int position, @NonNull final MessagesHelper model) {
holder.setMessage(model.getMessage());
final String userId = getRef(position).getKey();
final DatabaseReference mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(MessageSenderId).child(MessageRecieverId);
Query messageQuery = mTimeReference.limitToLast(10);
messageQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessagesHelper message = dataSnapshot.getValue(MessagesHelper.class);
mMessages();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
java


add a comment |
mMessages
is a method. I have an SQLite table, and every time a new message is received I want to add +1 to a column. That's what the mMessages()
method does, but instead of adding +1 every time a new child is added, it adds all the existing children every time I open the activity.
Say, support in table, the value is 10 and I have 5 children in the RecyclerView
, and I open it, and before I even receive a new child, the table gets +5 added because there are 5 existing children.
I don't want this to happen, but I want +1 to be added only when a new child is added. How can I achieve this?
@Override
protected void onBindViewHolder(@NonNull final Chat.MessagesViewHolder holder, final int position, @NonNull final MessagesHelper model) {
holder.setMessage(model.getMessage());
final String userId = getRef(position).getKey();
final DatabaseReference mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(MessageSenderId).child(MessageRecieverId);
Query messageQuery = mTimeReference.limitToLast(10);
messageQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessagesHelper message = dataSnapshot.getValue(MessagesHelper.class);
mMessages();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
java


mMessages
is a method. I have an SQLite table, and every time a new message is received I want to add +1 to a column. That's what the mMessages()
method does, but instead of adding +1 every time a new child is added, it adds all the existing children every time I open the activity.
Say, support in table, the value is 10 and I have 5 children in the RecyclerView
, and I open it, and before I even receive a new child, the table gets +5 added because there are 5 existing children.
I don't want this to happen, but I want +1 to be added only when a new child is added. How can I achieve this?
@Override
protected void onBindViewHolder(@NonNull final Chat.MessagesViewHolder holder, final int position, @NonNull final MessagesHelper model) {
holder.setMessage(model.getMessage());
final String userId = getRef(position).getKey();
final DatabaseReference mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(MessageSenderId).child(MessageRecieverId);
Query messageQuery = mTimeReference.limitToLast(10);
messageQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessagesHelper message = dataSnapshot.getValue(MessagesHelper.class);
mMessages();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
java


java


edited Nov 20 '18 at 1:53


Mihai Chelaru
2,140101022
2,140101022
asked Nov 19 '18 at 19:32
user10643013
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Firebase performs what is known as state synchronization: it synchronizes the data of what you listen to. To only get new data, you'll need to listen for only new data.
One way to do that is by having a timestamp and each item, and query for items with a timestamp after the time that you attach the listeners.
Another way is to limit to only the last item.
But both would also affect the messages that you show.
Also see:
- How to retrieve only new data?
the link u provided is of kotlin and can u show me how to achieve that using timestamp please
– user10643013
Nov 20 '18 at 5:00
add a comment |
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
});
}
});
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%2f53381432%2fonchildadded-in-firebaserecycleradapter%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
Firebase performs what is known as state synchronization: it synchronizes the data of what you listen to. To only get new data, you'll need to listen for only new data.
One way to do that is by having a timestamp and each item, and query for items with a timestamp after the time that you attach the listeners.
Another way is to limit to only the last item.
But both would also affect the messages that you show.
Also see:
- How to retrieve only new data?
the link u provided is of kotlin and can u show me how to achieve that using timestamp please
– user10643013
Nov 20 '18 at 5:00
add a comment |
Firebase performs what is known as state synchronization: it synchronizes the data of what you listen to. To only get new data, you'll need to listen for only new data.
One way to do that is by having a timestamp and each item, and query for items with a timestamp after the time that you attach the listeners.
Another way is to limit to only the last item.
But both would also affect the messages that you show.
Also see:
- How to retrieve only new data?
the link u provided is of kotlin and can u show me how to achieve that using timestamp please
– user10643013
Nov 20 '18 at 5:00
add a comment |
Firebase performs what is known as state synchronization: it synchronizes the data of what you listen to. To only get new data, you'll need to listen for only new data.
One way to do that is by having a timestamp and each item, and query for items with a timestamp after the time that you attach the listeners.
Another way is to limit to only the last item.
But both would also affect the messages that you show.
Also see:
- How to retrieve only new data?
Firebase performs what is known as state synchronization: it synchronizes the data of what you listen to. To only get new data, you'll need to listen for only new data.
One way to do that is by having a timestamp and each item, and query for items with a timestamp after the time that you attach the listeners.
Another way is to limit to only the last item.
But both would also affect the messages that you show.
Also see:
- How to retrieve only new data?
edited Nov 20 '18 at 0:24
answered Nov 19 '18 at 22:43
Frank van PuffelenFrank van Puffelen
228k28374397
228k28374397
the link u provided is of kotlin and can u show me how to achieve that using timestamp please
– user10643013
Nov 20 '18 at 5:00
add a comment |
the link u provided is of kotlin and can u show me how to achieve that using timestamp please
– user10643013
Nov 20 '18 at 5:00
the link u provided is of kotlin and can u show me how to achieve that using timestamp please
– user10643013
Nov 20 '18 at 5:00
the link u provided is of kotlin and can u show me how to achieve that using timestamp please
– user10643013
Nov 20 '18 at 5:00
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%2f53381432%2fonchildadded-in-firebaserecycleradapter%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