Я не могу присвоить значение документа Firestore экземпляру класса - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть экземпляр класса User (currentUser) с 3 параметрами: имя пользователя, адрес электронной почты и рейтинг, а также коллекция «пользователей» Firestore с документами, включающими только 3 поля: имя пользователя, адрес электронной почты и рейтинг. Я пытаюсь получить данные зарегистрированного пользователя и сохранить их в своем экземпляре currentUser и отобразить их с помощью метода loadUserData (), но Android просто не присвоит значение.

    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_profile, container, false);

        ownerProfileRetriever(this.getContext());

        loadUserData(root);

        viewPager = root.findViewById(R.id.view_pager);
        tabLayout = root.findViewById(R.id.tabs);
        viewPager.setAdapter(createCardAdapter());
        new TabLayoutMediator(tabLayout, viewPager,
                new TabLayoutMediator.TabConfigurationStrategy() {
                    @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                        tab.setText("Tab " + (position + 1));
                    }
                }).attach();


        return root;
    }

    private void ownerProfileRetriever(Context context) {
        String userId = FirebaseAuth.getInstance().getCurrentUser() != null ? FirebaseAuth.getInstance().getCurrentUser().getUid() : null;
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        if (userId == null || userId.isEmpty()) {
            Toast.makeText(context, "No user id", Toast.LENGTH_SHORT).show();
            return;
        }
        DocumentReference docRef = db.collection("users").document(userId);
        docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(DocumentSnapshot documentSnapshot) {

                currentUser = documentSnapshot.toObject(User.class);
            }
        });
    }

    private void loadUserData(View root){
        TextView username = root.findViewById(R.id.username);
        username.setText(currentUser.getUsername());
        TextView email = root.findViewById(R.id.email);
        email.setText(currentUser.getEmail());
        TextView rating = root.findViewById(R.id.ratingValue);
        rating.setText(String.valueOf(currentUser.getRating()));
    }
}

Когда Я запускаю его, я не получаю ошибок, но имя пользователя, адрес электронной почты и рейтинг не отображаются на экране. (на всякий случай дата, которая не должна отображаться в пейджере просмотра)

1 Ответ

1 голос
/ 16 апреля 2020

Вам нужно вызвать метод loadUserData() после получения данных:

        DocumentReference docRef = db.collection("users").document(userId);
        docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(DocumentSnapshot documentSnapshot) {

                currentUser = documentSnapshot.toObject(User.class);
                 loadUserData(root);
            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...