Firebase Android Java - не могу получить ценность ребенка - PullRequest
0 голосов
/ 28 марта 2019

Таким образом, я пытался реализовать способ проверить, отправил ли пользователь другу запрос в посещенный профиль, или получил ли пользователь запрос о дружбе из посещенного профиля. На основании результатов кнопки будут установлены на sent request, accept request, add friend или friends

Однако в моей функции Firebase первые 3 if операторы не выполняются, даже если один из них должен был быть выполнен. Первый оператор else if должен был сработать, потому что я уже отправил запрос на добавление в друзья в посещенный профиль.

Когда я запускаю отладку, она показывает что-то вроде value = {sentFriendRequests={jmarston=2}}. Итак, Firebase знает, что я добавил Джона Марстона в друзья, но по какой-то причине утверждение else if не сработало. Это оператор else, который работает вместо

Мой код внизу:

функция checkFriendRequestStatus

private void checkFriendRequestStatus(final ButtonStatus buttonsCallback, final String strSignedInUID, final String visitedUsername, final String strVisitedUID) {
        final DatabaseReference checkFriendRequestsRef = database.getReference("friend_requests/test/" + strSignedInUID);
        checkFriendRequestsRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                // choice is 1 to show buttons, then select which buttons to show with second params
                if (dataSnapshot.child("friends/" + visitedUsername).getValue(String.class) == strVisitedUID) {
                    buttonsCallback.setButtonStatus(1, 1);
                }
                else if (dataSnapshot.child("sentFriendRequest/" + visitedUsername).getValue(String.class) == strVisitedUID) {
                    buttonsCallback.setButtonStatus(1, 2);
                }
                else if (dataSnapshot.child("receivedFriendRequests/" + visitedUsername).getValue(String.class) == strVisitedUID) {
                    buttonsCallback.setButtonStatus(1, 3);
                }
                else {
                    buttonsCallback.setButtonStatus(1, 4);;
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

onViewСозданная функция

@Override
    public void onViewCreated(View view, Bundle savedInstanceState){
        sRFullName = (TextView) view.findViewById(R.id.sRUFullNameET);

        addFriendBtn = (Button) view.findViewById(R.id.sRUAddFriendBtn);
        sentRequestBtn = (Button) view.findViewById(R.id.sRUFriendReqSentBtn);
        acceptRequestBtn = (Button) view.findViewById(R.id.sRUAcceptRequestBtn);
        wereFriendsBtn = (Button) view.findViewById(R.id.sRUWeFriendsBtn);

        final String strVisitedUserID = getArguments().getString("sRUserID");
        final String visitedUsername = getArguments().getString("sRUsername");

        ShPreference = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

        // converts Stringed userID back to Int
        final String strSignedInUID = ShPreference.getInt(currentUserID, 0) + "";
        final String signedInUsername = ShPreference.getString(currentUsername, "");
        // converts the userSignedIn id to string
        //final String strSignedInUID = userSignedInID + "";

        // checks if the current User visited has been sent a friend Request
        checkFriendRequestStatus(new ButtonStatus() {
            @Override
            public void setButtonStatus(int choice, int button) {
                /**
                 * The choice params is for the choose if to show or hide buttons.
                 * The buttons params selects which buttons are to show or hide
                 */

                addFriendBtn.setVisibility(View.GONE);
                sentRequestBtn.setVisibility(View.GONE);
                acceptRequestBtn.setVisibility(View.GONE);
                wereFriendsBtn.setVisibility(View.GONE);

                // if choosed to show buttons
                if (choice == 1) {
                    // show buttons depending on the friendRequest status
                    if (button == 1) {
                        wereFriendsBtn.setVisibility(View.VISIBLE);
                    }
                    else if (button == 2) {
                        sentRequestBtn.setVisibility(View.VISIBLE);
                    }
                    else if (button == 3) {
                        acceptRequestBtn.setVisibility(View.VISIBLE);
                    }
                    else {
                        addFriendBtn.setVisibility(View.VISIBLE);
                    }
                }
            }
        }, strSignedInUID, visitedUsername, strVisitedUserID);


        // sets the name with the Full Name; called from SearchResultsAdapter
        sRFullName.setText(getArguments().getString("sRFullName"));
    }

1 Ответ

0 голосов
/ 28 марта 2019

Для сравнения объекта String используйте = вместо == (double equals).Двойное равенство будет сравнивать ссылки, а не их значения.

Обновите код сравнения, как показано ниже:

private void checkFriendRequestStatus(final ButtonStatus buttonsCallback, final String strSignedInUID, final String visitedUsername, final String strVisitedUID) {
        final DatabaseReference checkFriendRequestsRef = database.getReference("friend_requests/test/" + strSignedInUID);
        checkFriendRequestsRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                // choice is 1 to show buttons, then select which buttons to show with second params
                if (dataSnapshot.child("friends/" + visitedUsername).getValue(String.class).equals(strVisitedUID)) {
                    buttonsCallback.setButtonStatus(1, 1);
                }
                else if (dataSnapshot.child("sentFriendRequest/" + visitedUsername).getValue(String.class).equals(strVisitedUID)) {
                    buttonsCallback.setButtonStatus(1, 2);
                }
                else if (dataSnapshot.child("receivedFriendRequests/" + visitedUsername).getValue(String.class).equals(strVisitedUID)) {
                    buttonsCallback.setButtonStatus(1, 3);
                }
                else {
                    buttonsCallback.setButtonStatus(1, 4);;
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...