java - 再次调用上一个活动的方法 onBackPress
问题描述
屏幕截图 1 - https://ibb.co/k5O8Eo
屏幕截图 2 - https://ibb.co/bz5MZo
屏幕截图一个是它应该如何表现,当我打开它时它的表现确实如此......但是在我打开活动并转到下一个活动并回来之后......同样的消息被再次获取并显示两次虽然只有在数据库中它只有一次......我该如何解决这个问题?
@Override
protected void onStart() {
super.onStart();
fetchMessages();
}
private void fetchMessages() {
mDatabaseReference.child("Messages").child(MessageSenderId).child(MessageRecieverId).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Messages message = dataSnapshot.getValue(Messages.class);
messagesList.add(message);
mAdapter.notifyDataSetChanged();
}
@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) {
throw databaseError.toException();
}
});
}
解决方案
发生这种情况是因为您fetchMessages()
从方法内部调用方法onStart()
,这意味着每次您停止然后启动活动时,都会触发此方法并且您最终会获得重复数据。
要解决这个问题,请在方法中移动方法的调用,onCreate()
这样即使您从另一个活动返回或调用了该方法,数据也只会显示一次onBackPress()
。
推荐阅读
- angular - 如何仅刷新组件的一部分而不刷新 ngOnInIt() 角度?
- mysql - 在mysql过程中更新表的问题
- angular - Angular如何在canActive函数中获取标题值?
- algorithm - 比赛的获胜者
- ios - macOS Catalyst 应用程序未显示在 iTunes/App Store Connect 构建选项中
- javascript - 在回合制游戏中检测相邻玩家的有效方法
- javascript - JavaScript 表单验证无法使用 isNaN
- android - 没有收到来自 FCM 的任何通知
- javascript - JavaScript过滤器函数过滤掉数组中的零
- mysql - 跨多个表连接多个 SUM()