0

I got tablayout with 2 fragments. When 1st fragment go on resume we see the next flow

ActivityCallMethod -> PresenterCallMethod -> RepositoryCallMethod -> repositorySendCallBackToPresenter -> EventInPresenterTriggerAndCallMethodFromView -> ViewCallItsMethod ---And here strange ---> EventInPresenterTriggerAndCallMethodFromView (withTheSameData) -> ViewCallItsMethod (andDuplicateData)

When the fragment starts working first time its not calling method from presenter twice.

So why there is no double callback from repository but for some reason, presenter triggers twice?

ActivityCode

@Override
public void addRealUsers(List<OnlineUser> onlineUsers) {
    mAdapter.addUsers(onlineUsers);
}

PresenterCode

ublic class OnlineUsersPresenter {

private OnlineUsersInteractor mInteractor;
private OnlineUsersView mView;

public OnlineUsersPresenter(OnlineUsersInteractor mInteractor, OnlineUsersView view) {
    this.mInteractor = mInteractor;
    this.mView = view;
}

/**
 * Get the real list of the users
 */
@Subscribe
public void inflateReaUserList(RealUsersListEvent event) {
    mView.addRealUsers(event.getRealUserList());
}

RepositoryCode

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) {
            }
        });

EventCode

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;
}

And as I checked the usage of this event is only in one place. In userRepository

Bo Z
  • 2,359
  • 1
  • 13
  • 31
  • Log how many times `addListenerForSingleValueEvent()` is getting called. Confirm that it only get called once. – devmike01 Jan 28 '20 at 19:13
  • @DevMike01 yes I confirm that it only once. And from repository Event creates also only once. That presenter before was working on moxy. I removed everything according to that. But still the problem is the same – Bo Z Jan 28 '20 at 19:17

0 Answers0