Android 为什么来自presenter的方法可以触发两次,因为来自回调的调用只有一次(EventBus)
我有两个碎片。当第一个片段继续时,我们将看到下一个流 ActivityCallMethod->PresenterCallMethod->RepositoryCallMethod->repositorySendCallBackToPresenter->EventInPresenterTrigger和CallMethodFromView->ViewCallItsMethod---这里是奇怪的---->EventInPresenterTrigger和CallMethodFromView(使用相同的数据)->ViewCallItsMethod(和重复的数据) 当片段第一次开始工作时,它不会两次从presenter调用方法 那个么,为什么并没有来自存储库的双重回调,但出于某种原因,presenter会触发两次呢 活动代码Android 为什么来自presenter的方法可以触发两次,因为来自回调的调用只有一次(EventBus),android,firebase,events,event-bus,greenrobot-eventbus,Android,Firebase,Events,Event Bus,Greenrobot Eventbus,我有两个碎片。当第一个片段继续时,我们将看到下一个流 ActivityCallMethod->PresenterCallMethod->RepositoryCallMethod->repositorySendCallBackToPresenter->EventInPresenterTrigger和CallMethodFromView->ViewCallItsMethod---这里是奇怪的---->EventInPresenterTrigger和CallMethodFromView(使用相同的数据
@Override
public void addRealUsers(List<OnlineUser> onlineUsers) {
mAdapter.addUsers(onlineUsers);
}
存储代码
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChildren()) {
List<OnlineUser> newUser = new ArrayList<>();
for (DataSnapshot userSnapShot : dataSnapshot.getChildren()) {
newUser.add(userSnapShot.getValue(OnlineUser.class));
}
last_node = newUser.get(newUser.size() - 1).getUid();
last_rating = newUser.get(newUser.size() - 1).getRating();
if (!last_node.equals(last_key)) {
newUser.remove(newUser.size() - 1);
} else {
last_node = "end";
isMaxData = true;
}
isLoading = false;
EventBus.getDefault().post(new RealUsersListEvent(newUser));
} else {
isLoading = false;
isMaxData = true;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
query.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.hasChildren()){
List newUser=new ArrayList();
对于(DataSnapshot userSnapShot:DataSnapshot.getChildren()){
添加(userSnapShot.getValue(OnlineUser.class));
}
last_node=newUser.get(newUser.size()-1.getUid();
last_rating=newUser.get(newUser.size()-1.getRating();
如果(!last_node.equals(last_key)){
newUser.remove(newUser.size()-1);
}否则{
最后一个节点=“结束”;
isMaxData=true;
}
isLoading=false;
EventBus.getDefault().post(新RealUsersListEvent(新用户));
}否则{
isLoading=false;
isMaxData=true;
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
事件代码
List<OnlineUser> userList;
public RealUsersListEvent(List<OnlineUser> realUsersList) {
this.userList = realUsersList;
}
public List<OnlineUser> getRealUserList() {
return userList;
}
public void setRealUserList(List<OnlineUser> cardList) {
this.userList = cardList;
}
List用户列表;
公共RealUsersListEvent(列表realUsersList){
this.userList=realUsersList;
}
公共列表getRealUserList(){
返回用户列表;
}
公共无效setRealUserList(列表cardList){
this.userList=cardList;
}
当我检查这个事件的用法时,它只出现在一个地方。在userRepository中,记录调用
addListenerForSingleValueEvent()
的次数。确认只调用一次。@DevMike01是,我确认只调用一次。“从存储库”事件也只创建一次。那个演讲者之前在莫西工作。我根据这个删除了所有的东西。但问题仍然是一样的
List<OnlineUser> userList;
public RealUsersListEvent(List<OnlineUser> realUsersList) {
this.userList = realUsersList;
}
public List<OnlineUser> getRealUserList() {
return userList;
}
public void setRealUserList(List<OnlineUser> cardList) {
this.userList = cardList;
}